summaryrefslogtreecommitdiff
path: root/libguile/debug.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2014-02-07 15:01:33 +0100
committerAndy Wingo <wingo@pobox.com>2014-02-07 15:03:17 +0100
commitdc7a33fa871c42d0474602f3560d3ce350e1f1c3 (patch)
tree37495605b40c19ca83decd2b191fdb31510531b9 /libguile/debug.c
parenta1aae2c3a03afc542ab6a7c6672c5a645ac77b09 (diff)
parent60617d819d77a1b92ed6c557a0b49b8e9a8e97b9 (diff)
downloadguile-dc7a33fa871c42d0474602f3560d3ce350e1f1c3.tar.gz
Merge commit '60617d819d77a1b92ed6c557a0b49b8e9a8e97b9'
Conflicts: libguile/continuations.c libguile/eval.c libguile/goops.c libguile/instructions.c
Diffstat (limited to 'libguile/debug.c')
-rw-r--r--libguile/debug.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/libguile/debug.c b/libguile/debug.c
index 9e63f2c67..f9bcc33db 100644
--- a/libguile/debug.c
+++ b/libguile/debug.c
@@ -160,19 +160,21 @@ SCM_DEFINE (scm_debug_hang, "debug-hang", 0, 1, 0,
#undef FUNC_NAME
#endif
+static SCM local_eval_var;
+
+static void
+init_local_eval_var (void)
+{
+ local_eval_var = scm_c_public_variable ("ice-9 local-eval", "local-eval");
+}
+
SCM
scm_local_eval (SCM exp, SCM env)
{
- static SCM local_eval_var = SCM_UNDEFINED;
- static scm_i_pthread_mutex_t local_eval_var_mutex
- = SCM_I_PTHREAD_MUTEX_INITIALIZER;
-
- scm_i_scm_pthread_mutex_lock (&local_eval_var_mutex);
- if (SCM_UNBNDP (local_eval_var))
- local_eval_var = scm_c_public_variable ("ice-9 local-eval", "local-eval");
- scm_i_pthread_mutex_unlock (&local_eval_var_mutex);
+ static scm_i_pthread_once_t once = SCM_I_PTHREAD_ONCE_INIT;
+ scm_i_pthread_once (&once, init_local_eval_var);
- return scm_call_2 (SCM_VARIABLE_REF (local_eval_var), exp, env);
+ return scm_call_2 (scm_variable_ref (local_eval_var), exp, env);
}
static void