> 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
This archive was generated by hypermail 2b29 : Tue Feb 22 2000 - 11:49:30 MET