On Tue, Oct 14, 2014 at 7:09 AM, Jeremy Yallop <[email protected]> wrote: > On 8 October 2014 14:19, Hezekiah M. Carty <[email protected]> wrote: >> In the mean time are there any suggestions or techniques you can recommend to >> help track down the cause of this segfault? > > I think A. Hauptmann's advice elsewhere is worth repeating here, for > the benefit of anyone who runs into similar issues: > > "Use Gc.compact, not just Gc.full_major. And put it in a often > called function of your library code, not only at application level. I > always overlay any suspicious function with a wrapper of this scheme: > > let f .. = > Gc.compact (); > let x = f .. in > Gc.compact (); > x > > And then run your application with valgrind. Valgrind did find > this error instantly." > (https://github.com/hcarty/ocaml-gdal/pull/3)
To follow up on the specifics for this case: A finalization/free function provided by GDAL was freeing memory I had allocated from ctypes leading to a double free. As A. Hauptmann pointed out in the pull request link above, valgrind picked up the mistake and its source immediately. For this crash removing the GDAL-provided finalization function was enough to avoid the issue - OCaml + ctypes were already freeing everything the finalizer would have freed. I'm rather embarrassed that I didn't use valgrind in the first place. Thanks to A Hauptmann for getting me back on track with these bindings. Hez _______________________________________________ Ctypes mailing list [email protected] http://lists.ocaml.org/listinfo/ctypes
