1
Fork 0
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:
Marius Vollmer 2006-01-29 23:12:01 +00:00
parent e28cd808dc
commit cce0e9c875

View file

@ -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