diff options
author | Andy Wingo <wingo@pobox.com> | 2014-02-07 15:01:33 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2014-02-07 15:03:17 +0100 |
commit | dc7a33fa871c42d0474602f3560d3ce350e1f1c3 (patch) | |
tree | 37495605b40c19ca83decd2b191fdb31510531b9 /libguile/debug.c | |
parent | a1aae2c3a03afc542ab6a7c6672c5a645ac77b09 (diff) | |
parent | 60617d819d77a1b92ed6c557a0b49b8e9a8e97b9 (diff) | |
download | guile-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.c | 20 |
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 |