mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
(scm_eval_body): Lock source_mutex with a dynwind context
so that it gets unlocked in all cases. (SCM_APPLY, CEVAL): Likewise.
This commit is contained in:
parent
e28cd808dc
commit
cce0e9c875
1 changed files with 9 additions and 6 deletions
|
@ -2969,11 +2969,12 @@ scm_eval_body (SCM code, SCM env)
|
|||
{
|
||||
if (SCM_ISYMP (SCM_CAR (code)))
|
||||
{
|
||||
scm_i_scm_pthread_mutex_lock (&source_mutex);
|
||||
scm_dynwind_begin (0);
|
||||
scm_dynwind_pthread_mutex_lock (&source_mutex);
|
||||
/* check for race condition */
|
||||
if (SCM_ISYMP (SCM_CAR (code)))
|
||||
m_expand_body (code, env);
|
||||
scm_i_pthread_mutex_unlock (&source_mutex);
|
||||
scm_dynwind_end ();
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
@ -3367,11 +3368,12 @@ dispatch:
|
|||
{
|
||||
if (SCM_ISYMP (form))
|
||||
{
|
||||
scm_i_scm_pthread_mutex_lock (&source_mutex);
|
||||
scm_dynwind_begin (0);
|
||||
scm_dynwind_pthread_mutex_lock (&source_mutex);
|
||||
/* check for race condition */
|
||||
if (SCM_ISYMP (SCM_CAR (x)))
|
||||
m_expand_body (x, env);
|
||||
scm_i_pthread_mutex_unlock (&source_mutex);
|
||||
scm_dynwind_end ();
|
||||
goto nontoplevel_begin;
|
||||
}
|
||||
else
|
||||
|
@ -4966,11 +4968,12 @@ tail:
|
|||
{
|
||||
if (SCM_ISYMP (SCM_CAR (proc)))
|
||||
{
|
||||
scm_i_scm_pthread_mutex_lock (&source_mutex);
|
||||
scm_dynwind_begin (0);
|
||||
scm_dynwind_pthread_mutex_lock (&source_mutex);
|
||||
/* check for race condition */
|
||||
if (SCM_ISYMP (SCM_CAR (proc)))
|
||||
m_expand_body (proc, args);
|
||||
scm_i_pthread_mutex_unlock (&source_mutex);
|
||||
scm_dynwind_end ();
|
||||
goto again;
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue