diff options
author | Andy Wingo <wingo@pobox.com> | 2016-11-01 22:40:38 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-11-01 22:40:38 +0100 |
commit | c88d0cc402f9146023df7d6c2309510882599eba (patch) | |
tree | 57d7b51ef9e69b6a26c0525868e03d898ddeaae0 /libguile/keywords.c | |
parent | cfab7e3bf3f1128a9029c3e446ef93312706ce74 (diff) | |
download | guile-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.c | 5 |
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 |