From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: weis Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id SAA05317 for caml-redistribution@pauillac.inria.fr; Mon, 21 Feb 2000 18:04:11 +0100 (MET) Resent-Message-Id: <200002211704.SAA05317@pauillac.inria.fr> 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 KAA17897 for ; Fri, 18 Feb 2000 10:45:26 +0100 (MET) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.8.7/8.8.7) with ESMTP id KAA21876; Fri, 18 Feb 2000 10:45:24 +0100 (MET) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA04521; Fri, 18 Feb 2000 10:45:23 +0100 (MET) Message-ID: <20000218104523.12491@pauillac.inria.fr> Date: Fri, 18 Feb 2000 10:45:23 +0100 From: Xavier Leroy To: =?iso-8859-1?Q?David_Mentr=E9?= , caml-list@inria.fr Subject: Re: Calling C from OCaml, GC problems References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.89.1 In-Reply-To: =?iso-8859-1?Q?=3Cwd8ael1noi1=2Efsf=40parate=2Eirisa=2Efr=3E=3B_from_Dav?= =?iso-8859-1?Q?id_Mentr=E9_on_Wed=2C_Feb_16=2C_2000_at_04=3A41=3A42PM_+0?= =?iso-8859-1?Q?100?= Resent-From: weis@pauillac.inria.fr Resent-Date: Mon, 21 Feb 2000 18:04:11 +0100 Resent-To: caml-redistribution@pauillac.inria.fr > 1. the ocaml doc (paragraph 15.5) states that CAMLparam and CAMLreturn > macros should be used. However, example code in 15.7 does not use > them (even if functions have value typed parameters). The Unix > interfacing code ocaml-2.04/otherlibs/unix/) doesn't use those macro > either. Faulty doc? Are those macros not mandatory? What is the > rationale? We've been through several designs for the "local root registration" API. The CAMLxxx macros are the latest design, and the one that we think is the easiest to use. Most parts of the systems were written before those macros were introduced, and thus still use an older API in 2.04 (but the next release of OCaml will use the new API). > 2. when compiling, I've tons of warning like this: > bdd_interface.c: In function `mlbdd_alloc_manager': > bdd_interface.c:136: warning: left-hand operand of comma expression has no effect > bdd_interface.c:136: warning: unused variable `caml__dummy_result' I think those warnings are harmless, and are due to the way the CAMLxxx macros are written in 2.04. But only Damien Doligez knows for sure... > 3. The code is running on small examples but segfault on bigger > ones. From gdb backtrace, it seems clear that my bug is releated to > a GC problem: That is often due to a local root not being registered, or being incorrectly registered. > The bdd library is using itself a memory management library calling > sbrk(2). Can it trigger problems with OCaml GC (like the GC going > into bdd structures)? This shouldn't be a problem. OCaml allocates its heap using malloc(), and scans only the portions of the memory space that it allocated itself. There might be funky interactions between sbrk() and malloc(), but this is unlikely, as it would cause problem with the BDD library even in C programs. - Xavier Leroy