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 SAA11777 for caml-redistribution@pauillac.inria.fr; Mon, 21 Feb 2000 18:17:49 +0100 (MET) Resent-Message-Id: <200002211717.SAA11777@pauillac.inria.fr> 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 PAA07627 for ; Mon, 21 Feb 2000 15:09:32 +0100 (MET) Received: from air.irisa.fr (air.irisa.fr [131.254.60.130]) by nez-perce.inria.fr (8.8.7/8.8.7) with ESMTP id PAA05982 for ; Mon, 21 Feb 2000 15:09:30 +0100 (MET) Received: from parate.irisa.fr (parate.irisa.fr [131.254.12.25]) by air.irisa.fr (8.9.3/8.9.3) with ESMTP id PAA23948; Mon, 21 Feb 2000 15:09:30 +0100 (MET) Sender: David.Mentre@irisa.fr To: caml-list@inria.fr Cc: colcombe@irisa.fr Subject: Still strange GC problems with OCaml and C: OCaml 2.04 bug? From: David.Mentre@irisa.fr (David=?iso-8859-1?q?_Mentr=E9?=) Date: 21 Feb 2000 15:09:30 +0100 Message-ID: User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.4 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Resent-From: weis@pauillac.inria.fr Resent-Date: Mon, 21 Feb 2000 18:17:49 +0100 Resent-To: caml-redistribution@pauillac.inria.fr Hi all Camlists, I'm still fighting against my bug while trying to interface OCaml with CMU bdd library (in C). Following Xavier comments, I've protected my values (with CAMLparamXX and CAMLlocalXX macros). Actual code is available at: http://www.irisa.fr/paris/pages-perso/David-Mentre/bdd.ml http://www.irisa.fr/paris/pages-perso/David-Mentre/bdd_interface.c 1. I still obtain a segfault, however, the gdb backtrace has changed: (gdb) bt #0 0x80655b5 in mark_slice () #1 0x80659eb in major_collection_slice () #2 0x8065fd3 in minor_collection () #3 0x8063859 in interprete () #4 0x8065043 in caml_main () #5 0x805ab45 in main () #6 0x2ab457e2 in __libc_start_main () from /lib/libc.so.6 It is still a GC bug, however the problem no longer arises while our C interface allocates CAML memory. So I think the bug has moved (or this is another bug). 2. More interestingly, by compiling this code with OCaml 2.99 under sun4 architecture, this bug no longer occurs. I obtain in place a: Fatal error: uncaught exception Invalid_argument("Array.get") So, it would be possible that some Invalid_argument exceptions are not properly caught in OCaml 2.04. For CAML team, I was not able to produce a small/simple example that can trigger this bug. Only my gas-plant program seems to segfault. Sorry. 3. I've found an interesting message on Damien Doliguez site[1]: http://pauillac.inria.fr/~doligez/caml-guts/Fahndrich99.txt This message tells that you can have strange CAML GC related problems while deallocating C structures. However, I think my code is in case 2 of Manuel proposed fixes (i.e. box every C pointer inside an abstract CAML block). So, in my opinion, my bug is not related to this problem. But, as am I paranoid now :), I've set pointers to 1 after deallocating them. This not fixed the bug. Anyway, if somebody has an advice on how to track down this bug, I'll glady accept it. David -- once happy in the Caml-only world [1]http://pauillac.inria.fr/~doligez/caml-guts/ -- David.Mentre@irisa.fr -- http://www.irisa.fr/prive/dmentre/ Opinions expressed here are only mine.