Re: Still strange GC problems with OCaml and C: OCaml 2.04 bug?

From: Markus Mottl (mottl@miss.wu-wien.ac.at)
Date: Mon Feb 21 2000 - 21:10:34 MET

  • Next message: skaller: "Re: Thread feature missing"

    > 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