[EMAIL PROTECTED] (Ludovic Courtès) writes: > The problem stems from the fact that > `scm_i_mark_weak_vector_non_weaks ()' would not mark a value > attached to a weak key if that weak key is unmarked. Therefore, > both the weak key and its associated value become unmarked during > the very same mark phase. And since the order in which they are > swept during the subsequent sweep phase is undefined, we have a > problem.
I still have to read your patch carefully, but just from your description of the problem, I would say that nothing is actually wrong. We don't make any guarantees about the sequence in which objects are 'freed' that are unreachable. This should only matter for smobs with their user written FREE procedures. The manual says: The FREE procedure must deallocate all resources that are directly associated with the smob instance OBJ. It must assume that all `SCM' values that it references have already been freed and are thus invalid. It must also not call any libguile function or macro except `scm_gc_free', `SCM_SMOB_FLAGS', `SCM_SMOB_DATA', `SCM_SMOB_DATA_2', and `SCM_SMOB_DATA_3'. No? > $ guile > guile> (gc-live-object-stats) > Segmentation fault (core dumped) > > BTW, in `scm_init_properties ()', SCM_PROPERTIES_WHASH was not made > permanent, which looks like an error. I'll look at these two issues first. -- GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3 331E FAF8 226A D5D4 E405 _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel