I'm using libgc v 7.2alpha4. Apparently the value of GC_all_interior_pointers is 1 when initializing the GC (so GC_old_normal_bl is not initialized) and suddenly is set to 1 so that the next call to GC_is_black_listed dereference it and thus crash.
It's set to 0 by scm_storage_prehistory in liguile. I do not understand how this GC works, but find it strange that this global variable is changed like this, especially since the libgc gc.h reads : "GC_all_interior_pointers (...) May not be changed after GC initialization." How come the libgc GC_init function was already called when scm_storage_prehistory is called ? Apparently, the libgc overload pthread_create with its GC_pthread_create(). So, guile must be inited before starting any thread. Let's try... OK, it works. :-)
