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/strports.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/strports.c')
-rw-r--r-- | libguile/strports.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/libguile/strports.c b/libguile/strports.c index 591089477..dd3bc59d4 100644 --- a/libguile/strports.c +++ b/libguile/strports.c @@ -456,6 +456,16 @@ scm_c_eval_string_in_module (const char *expr, SCM module) } +static SCM eval_string_var; +static SCM k_module; + +static void +init_eval_string_var_and_k_module (void) +{ + eval_string_var = scm_c_public_variable ("ice-9 eval-string", "eval-string"); + k_module = scm_from_locale_keyword ("module"); +} + SCM_DEFINE (scm_eval_string_in_module, "eval-string", 1, 1, 0, (SCM string, SCM module), "Evaluate @var{string} as the text representation of a Scheme\n" @@ -467,23 +477,16 @@ SCM_DEFINE (scm_eval_string_in_module, "eval-string", 1, 1, 0, "procedure returns.") #define FUNC_NAME s_scm_eval_string_in_module { - static SCM eval_string = SCM_UNDEFINED, k_module = SCM_UNDEFINED; - static scm_i_pthread_mutex_t init_mutex = SCM_I_PTHREAD_MUTEX_INITIALIZER; - - scm_i_scm_pthread_mutex_lock (&init_mutex); - if (SCM_UNBNDP (eval_string)) - { - eval_string = scm_c_public_variable ("ice-9 eval-string", "eval-string"); - k_module = scm_from_locale_keyword ("module"); - } - scm_i_pthread_mutex_unlock (&init_mutex); + static scm_i_pthread_once_t once = SCM_I_PTHREAD_ONCE_INIT; + scm_i_pthread_once (&once, init_eval_string_var_and_k_module); if (SCM_UNBNDP (module)) module = scm_current_module (); else SCM_VALIDATE_MODULE (2, module); - return scm_call_3 (scm_variable_ref (eval_string), string, k_module, module); + return scm_call_3 (scm_variable_ref (eval_string_var), + string, k_module, module); } #undef FUNC_NAME |