summaryrefslogtreecommitdiff
path: root/libguile/strports.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/strports.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/strports.c')
-rw-r--r--libguile/strports.c25
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