summaryrefslogtreecommitdiff
path: root/libguile/keywords.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-11-01 22:40:38 +0100
committerAndy Wingo <wingo@pobox.com>2016-11-01 22:40:38 +0100
commitc88d0cc402f9146023df7d6c2309510882599eba (patch)
tree57d7b51ef9e69b6a26c0525868e03d898ddeaae0 /libguile/keywords.c
parentcfab7e3bf3f1128a9029c3e446ef93312706ce74 (diff)
downloadguile-c88d0cc402f9146023df7d6c2309510882599eba.tar.gz
Mutex instead of critical sectoin in symbol->keyword
* libguile/keywords.c (scm_symbol_to_keyword): Use a mutex in a dynwind instead of a critical section.
Diffstat (limited to 'libguile/keywords.c')
-rw-r--r--libguile/keywords.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libguile/keywords.c b/libguile/keywords.c
index 49cccd5a5..cd9c9d8a8 100644
--- a/libguile/keywords.c
+++ b/libguile/keywords.c
@@ -63,7 +63,8 @@ SCM_DEFINE (scm_symbol_to_keyword, "symbol->keyword", 1, 0, 0,
SCM_ASSERT_TYPE (scm_is_symbol (symbol), symbol, 0, NULL, "symbol");
- SCM_CRITICAL_SECTION_START;
+ scm_dynwind_begin (0);
+ scm_dynwind_pthread_mutex_lock (&scm_i_misc_mutex);
/* Note: `scm_cell' and `scm_hashq_set_x' can raise an out-of-memory
error. */
keyword = scm_hashq_ref (keyword_obarray, symbol, SCM_BOOL_F);
@@ -72,7 +73,7 @@ SCM_DEFINE (scm_symbol_to_keyword, "symbol->keyword", 1, 0, 0,
keyword = scm_cell (scm_tc7_keyword, SCM_UNPACK (symbol));
scm_hashq_set_x (keyword_obarray, symbol, keyword);
}
- SCM_CRITICAL_SECTION_END;
+ scm_dynwind_end ();
return keyword;
}
#undef FUNC_NAME