Version française
Home     About     Download     Resources     Contact us    
Browse thread
Re: Still strange GC problems with OCaml and C: OCaml 2.04 bug?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Markus Mottl <mottl@m...>
Subject: Re: Still strange GC problems with OCaml and C: OCaml 2.04 bug?
> I'm still fighting against my bug while trying to interface OCaml with
> CMU bdd library (in C).

Hm, I have just taken a look at the code. I do not want to be too fast with
my suggestion (I have not tried it), but I am pretty sure that the
following might be the bug:

You use "Store_field" throughout the code to assign pointers to fields in
structures which were allocated using "alloc_final".

I once had a similar bug in my PCRE-library, but Gerd Stolpmann was so kind
to send me the patch and explain the problem. Here his translated
explanation (seems reasonable):

  - after "alloc_small" the fields have to be initialized with
    "Field(var, n) = ...", not with "Store_field". The last version writes
    (with some bad luck) the address of the field into a list of addresses
    which have to be moved in case of a minor GC.

  - The fields of "alloc_final" are not considered by the GC. Therefore,
    they, too, have to be written to using "Field(var, n)" (or you may
    cast them to a normal C-struct). "Store_field" has, again, unexpected
    side effects.

Since you are lucky and have used access macros throughout the code, you
can quickly test my suggestion by changing them.

I hope that helps!

In case this is really the bug (probably), I'd suggest a revision of the
C-interface-documentation. At least to me it was not obvious that
"Store_field" leads to such additional, unexpected behaviour.

Good luck squeezing the bug,
Markus Mottl

-- 
Markus Mottl, mottl@miss.wu-wien.ac.at, http://miss.wu-wien.ac.at/~mottl