summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2013-11-17 03:19:32 -0500
committerMark H Weaver <mhw@netris.org>2013-11-17 04:35:24 -0500
commitf68f42d2014bb3dfb8a0d7c502f9d3d9593ee458 (patch)
treeba09b0d9b040e51d5ab9dfe0d626273f403ca0da
parent9b48be7107f3f98cdf2e756d4c1f4c937ff233d7 (diff)
downloadguile-f68f42d2014bb3dfb8a0d7c502f9d3d9593ee458.tar.gz
Block system asyncs while 'overrides_lock' is held.
* libguile/procprop.c (scm_set_procedure_property_x): Block system asyncs while overrides_lock is held. Use dynwind block in case an exception is thrown.
-rw-r--r--libguile/procprop.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libguile/procprop.c b/libguile/procprop.c
index 36228d3f3..dae3ea7d0 100644
--- a/libguile/procprop.c
+++ b/libguile/procprop.c
@@ -229,7 +229,8 @@ SCM_DEFINE (scm_set_procedure_property_x, "set-procedure-property!", 3, 0, 0,
SCM_MISC_ERROR ("arity is a deprecated read-only property", SCM_EOL);
#endif
- scm_i_pthread_mutex_lock (&overrides_lock);
+ scm_dynwind_begin (0);
+ scm_i_dynwind_pthread_mutex_lock_with_asyncs (&overrides_lock);
props = scm_hashq_ref (overrides, proc, SCM_BOOL_F);
if (scm_is_false (props))
{
@@ -239,7 +240,7 @@ SCM_DEFINE (scm_set_procedure_property_x, "set-procedure-property!", 3, 0, 0,
props = SCM_EOL;
}
scm_hashq_set_x (overrides, proc, scm_assq_set_x (props, key, val));
- scm_i_pthread_mutex_unlock (&overrides_lock);
+ scm_dynwind_end ();
return SCM_UNSPECIFIED;
}