Hey, I ran further tests and my understanding is that the weak hash-table / finalizer mechanism is not compatible with a C function that can return multiple times the same allocated object. Even if we were to introduce a set-pointer-unique-finalizer! procedure that calls scm_i_set_finalizer instead of scm_i_add_finalizer we would still have double free errors because the finalizers are registered on SCM pointers and not on libparted C pointers when calling GC_REGISTER_FINALIZER_NO_ORDER. I tested it out and I had several SCM pointers encapsulating the same libparted C pointer, thus multiple finalizers on the same underlying C pointer. Anyway, here is a patch that solves the issue by removing the device finalizer. It also means that all devices are persisted until the end of the program which doesn't feel right, but I cannot think of a better solution. Let me know if you agree with my reasoning :) Thanks, Mathieu