On Sun 14 Dec 2008 00:59, l...@gnu.org (Ludovic Courtès) writes: >> - if (scm_i_critical_section_level) >> + if (SCM_I_CURRENT_THREAD->block_asyncs) > > It seems to me that "throw from within critical section" means precisely > "throw when SCM_I_CRITICAL_SECTION_LEVEL is non-zero". I don't see what > asyncs have to do with that.
When scm_i_critical_section_level is nonzero, t->block_asyncs is nonzero. The reverse is not true. So... two options then: make this change, hoping that we don't get too many throws when asyncs are blocked for other reasons... sounds not so good. Or we remove the check entirely, hoping that there's not too much erroneous code out there that this check would help. It seems like we should do the latter, and in 1.9 make it a goal to remove critical sections entirely, all 45 uses or so, replacing them with finer-grained mutexen or redoing the code. Andy -- http://wingolog.org/