From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id DAA13159; Thu, 19 Sep 2002 03:41:16 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id DAA12401 for ; Thu, 19 Sep 2002 03:41:14 +0200 (MET DST) X-SPAM-Warning: Sending machine is listed in blackholes.five-ten-sg.com Received: from hawk.mail.pas.earthlink.net (hawk.mail.pas.earthlink.net [207.217.120.22]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id g8J1fD128133 for ; Thu, 19 Sep 2002 03:41:13 +0200 (MET DST) Received: from user-0ccegbj.cable.mindspring.com ([24.199.65.115] helo=cs.cornell.edu) by hawk.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id 17rqJc-0002yA-00 for caml-list@inria.fr; Wed, 18 Sep 2002 18:41:12 -0700 Message-ID: <3D892B38.3040809@cs.cornell.edu> Date: Wed, 18 Sep 2002 21:41:12 -0400 From: "Yaron M. Minsky" User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020826 X-Accept-Language: en-us, en MIME-Version: 1.0 To: caml-list@inria.fr Subject: Re: [Caml-list] Bp_val and Data_custom_val References: <3D88DA09.4010906@cs.cornell.edu> <3D891635.4030002@htec.demon.co.uk> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Interesting. So I guess that my code has been overwriting the pointer to the custom operations block. I wonder, though, what the significance of the following paragraph from the documentation is, and in particular what is meant by "the format of custom blocks is compatible with that of finalized blocks". Custom blocks generalize the finalized blocks that were present in Objective Caml prior to version 3.00. For backward compatibility, the format of custom blocks is compatible with that of finalized blocks, and ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the alloc_final function is still available to allocate a custom block with a given finalization function, but default comparison, hashing and serialization functions. alloc_final(n, f, used, max) returns a fresh custom block of size n words, with finalization function f. The first word is reserved for storing the custom operations; the other n-1 words are available for your data. The two parameters used and max are used to control the speed of garbage collection, as described for alloc_custom. Christopher Quinn wrote: > hi, > > Bp_val() returns a pointer to the first word(byte really since Bp == > byte pointer) after the header, while Data_val_custom() returns the > address of the second word (value), which is because with finalisation > the first word is occupied by a pointer to the specific finalisation > struct of handlers (finalise, serialise, de-serialise et al). > > so it is not the same layout! > > - chris > > Yaron M. Minsky wrote: > >> I'm wondering if someone can help me out in understanding the >> difference between Bp_val and Data_custom_val. These are both macros >> for accessing caml values from C. I lifted and adapted some code from >> the distribution for building a berkeley DB interface. In that code, >> Bp_val is used to access the contents of finalized blocks. I adapted >> that code but shifted to custom blocks, which according to the docs >> have the same layout. The docs also suggest using Data_custom_val for >> custom blocks. But when I try to do that, I end up with segfaults. >> I'm wondering what precisely the difference is. Here's a snippet of >> my data type definitions and the macros I use for accessing the data >> contained in the custom blocks holding that data: >> >> >> struct camldb { >> DB *db; >> int closed; >> }; >> >> struct camltxn { >> DB_TXN *txn; >> int closed; >> }; >> >> #define UW_db(v) (((struct camldb *)Bp_val(v))->db) >> #define UW_db_closed(v) (((struct camldb *)Bp_val(v))->closed) >> >> #define UW_txn(v) (((struct camltxn *)Bp_val(v))->txn) >> #define UW_txn_closed(v) (((struct camltxn *)Bp_val(v))->closed) >> >> Anything fishy about that? And any problem with replacing Bp_val with >> Data_custom_val here? >> >> By the way, in a separate post, I put a URL for where you can download >> the entire wrapper in question. Here it is again: >> >> http://minsky-primus.homeip.net/ocaml/bdb.tar.gz >> >> y >> >> >> ------------------- >> To unsubscribe, mail caml-list-request@inria.fr Archives: >> http://caml.inria.fr >> Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: >> http://caml.inria.fr/FAQ/ >> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners >> > > ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners