* coop.c, iselect.c: Since thread switches are now performed with
authorMikael Djurfeldt <djurfeldt@nada.kth.se>
Fri, 30 Jan 1998 21:08:26 +0000 (21:08 +0000)
committerMikael Djurfeldt <djurfeldt@nada.kth.se>
Fri, 30 Jan 1998 21:08:26 +0000 (21:08 +0000)
commitc69dfa6575e6de1063f91a1a9a94808e404f06d0
tree03dc6359935775d59291a662e53a7233ec68fb9c
parent9cb5124fe31ea2910272628ede9edfcf77757e23
* coop.c, iselect.c: Since thread switches are now performed with
interrupts masked, we can't use the old mechanism of delivering
signals immediately when they arrive.  Signals must instead be
delivered when the asyncs run *after* the end of the critical
section in scm_internal_select.  But this also means after context
switch so that the signal will be delivered to a different thread.
To avoid this, I have changed the protocol of
coop_wait_for_runnable_thread and friends so that they are allowed
to return the original thread.  So, if a signal arrives during
scm_internal_select, we won't any longer be forced do a context
switch, but can remain in the same thread and deliver the signal
to it.

* iselect.c: Small fixes.
libguile/ChangeLog
libguile/iselect.c
libguile/iselect.h