mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-30 17:00:23 +02:00
* iselect.c (coop_next_runnable_thread,
coop_wait_for_runnable_thread): Disable interrupts so that no async is executed before a potential error_revive. (scm_internal_select): Disable interrupts during the parts of the code which manipulate the sleep queue and the file descriptors.
This commit is contained in:
parent
81e81a5cb7
commit
c718cb0702
2 changed files with 9 additions and 0 deletions
|
@ -3,6 +3,8 @@
|
||||||
* iselect.c (coop_next_runnable_thread,
|
* iselect.c (coop_next_runnable_thread,
|
||||||
coop_wait_for_runnable_thread): Disable interrupts so that no
|
coop_wait_for_runnable_thread): Disable interrupts so that no
|
||||||
async is executed before a potential error_revive.
|
async is executed before a potential error_revive.
|
||||||
|
(scm_internal_select): Disable interrupts during the parts of the
|
||||||
|
code which manipulate the sleep queue and the file descriptors.
|
||||||
|
|
||||||
1997-11-27 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
1997-11-27 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
||||||
|
|
||||||
|
|
|
@ -524,10 +524,14 @@ scm_internal_select (int nfds,
|
||||||
&& timeout->tv_usec == 0)
|
&& timeout->tv_usec == 0)
|
||||||
return select (nfds, readfds, writefds, exceptfds, timeout);
|
return select (nfds, readfds, writefds, exceptfds, timeout);
|
||||||
|
|
||||||
|
++scm_ints_disabled;
|
||||||
|
|
||||||
/* Add our file descriptor flags to the common set. */
|
/* Add our file descriptor flags to the common set. */
|
||||||
if (add_fd_sets (nfds, readfds, writefds, exceptfds))
|
if (add_fd_sets (nfds, readfds, writefds, exceptfds))
|
||||||
{
|
{
|
||||||
errno = EBADF; /* Several threads can't select on same fds. */
|
errno = EBADF; /* Several threads can't select on same fds. */
|
||||||
|
if (!--scm_ints_disabled)
|
||||||
|
SCM_ASYNC_TICK;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,6 +558,9 @@ scm_internal_select (int nfds,
|
||||||
t = coop_wait_for_runnable_thread_now (&now);
|
t = coop_wait_for_runnable_thread_now (&now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!--scm_ints_disabled)
|
||||||
|
SCM_ASYNC_TICK;
|
||||||
|
|
||||||
/* If the new thread is the same as the sleeping thread, do nothing */
|
/* If the new thread is the same as the sleeping thread, do nothing */
|
||||||
if (t != curr)
|
if (t != curr)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue