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 FAA21827; Fri, 30 May 2003 05:53:31 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id FAA21823 for ; Fri, 30 May 2003 05:53:30 +0200 (MET DST) Received: from mail.eecs.harvard.edu (bowser.eecs.harvard.edu [140.247.60.24]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h4U3rTT11098 for ; Fri, 30 May 2003 05:53:29 +0200 (MET DST) Received: by mail.eecs.harvard.edu (Postfix, from userid 32018) id 17B9654C4E8; Thu, 29 May 2003 23:53:29 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.eecs.harvard.edu (Postfix) with ESMTP id 14E6F54C4A8; Thu, 29 May 2003 23:53:29 -0400 (EDT) Date: Thu, 29 May 2003 23:53:29 -0400 (EDT) From: Lex Stein To: caml-list@inria.fr Subject: Re: [Caml-list] perplexing marshaling exception In-Reply-To: Message-ID: References: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Spam: no; 0.00; stein:01 caml-list:01 marshaling:01 unboxed:01 foo:01 nativeint:01 callback:01 stdio:01 argc:01 char:01 argv:01 val:01 ocamlc:01 -output-obj:01 ocamlbdb:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Hello, I've replicated this mysterious behaviour in a small, simple example. Interestingly, the problem pops up for values with Custom_tag, but not for unboxed, String_tag, or whatever bools are: spruce:/home/lair/stein/th/db_test(215) cat foo1.ml let test _ = let k = Nativeint.zero in let s = Marshal.to_string k [] in let s1 = Marshal.from_string s 0 in ();; let _ = Callback.register "c_test" test;; spruce:/home/lair/stein/th/db_test(216) cat doc1.c #include #include #include int main (int argc, char **argv) { static value * clos; caml_startup (argv); clos = caml_named_value ("c_test"); assert (clos != NULL); callback (*clos, Val_unit); return (0); } spruce:/home/lair/stein/th/db_test(217) make doc1 ocamlc -g -custom -output-obj -I /home/lair/stein/th/ocamlbdb/ -o foo1_caml.o foo1.cmo foo1_caml.c: In function `caml_startup': foo1_caml.c:1082: warning: implicit declaration of function `caml_startup_code' gcc -g -DDEBUG -o doc1 doc1.o foo1_caml.o \ -L/usr/local/lib/ocaml/ -lcamlrun -lm -ldl -lstr spruce:/home/lair/stein/th/db_test(218) ./doc1 Fatal error: exception Failure("input_value: unknown custom block identifier") (Program not linked with -g, cannot print stack backtrace) Now change the line "let k = Nativeint.zero in" in foo1.ml to "let k = 0 in" and redo those steps. No exception will be raised. The marshaling documentation says that marshal can handle interesting, boxed types like Nativeints, Int32s, and Int64s. What am I doing wrong here? Thanks Lex On Thu, 29 May 2003, Lex Stein wrote: > > Hello, I'm having a curious and perplexing problem with unmarshaling > (Marshal module). > > I have two executables that differ in that one is built from a C main > routine that calls into Caml closures via callback() and a second that is > built from code that makes these same calls from Caml directly. Both of > these programs call Caml routines that read/write records to Berkeley-DB > (BDB) via a homegrown Caml interface to the BDB C library. Here's a > diagram: > > 1: main program (C) | DB read/write (Caml) | BDB (C) > 2: DB read/write (Caml) | BDB (C) > > In 1, the main program does very little that's interesting. The only > values that it passes to its callbacks are copy_string()'ed pathnames > representing the location of the database. In 2, these same strings are > arguments to Caml source code calls to the same Caml routines that the C > code calls in case 1. > > However, I get an error when I call from C (case 1) that I don't get in > case 2. > > In case 1, in the DB read/write Caml code, when I try to unmarshal a > string retrieved from BDB, I get: > > Fatal error: exception Failure("input_value: unknown custom block identifier") > (Program not linked with -g, cannot print stack backtrace) > > In case 2, when I try to do this, I get no such error. (Also of interest > is the claim that the program was not linked with -g. This just isn't > true. However, this isn't my main concern). > > Any idea what's going on here? Why unmarshal is failing when I have a C > main program? > > Much appreciated! > > Lex > > ------------------- > 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