From a61b2054b47d20bcc3197feee7756e4033423c21 Mon Sep 17 00:00:00 2001 From: Neil Jerram Date: Sun, 24 Apr 2005 12:23:24 +0000 Subject: [PATCH] Critical section review --- libguile/gh.h | 2 +- libguile/guardians.c | 7 ++++++- libguile/keywords.c | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libguile/gh.h b/libguile/gh.h index f891f0938..cc230cfa0 100644 --- a/libguile/gh.h +++ b/libguile/gh.h @@ -231,7 +231,7 @@ SCM_API void gh_newline (void); #endif #endif /* __GH_H */ -/* njrev: critical sections reviewed so far up to here */ + /* Local Variables: c-file-style: "gnu" diff --git a/libguile/guardians.c b/libguile/guardians.c index 5ea384903..f234bac2e 100644 --- a/libguile/guardians.c +++ b/libguile/guardians.c @@ -226,6 +226,7 @@ scm_guard (SCM guardian, SCM obj, int throw_p) SCM z; /* This critical section barrier will be replaced by a mutex. */ + /* njrev: per comment above, should use a mutex. */ SCM_CRITICAL_SECTION_START; if (GREEDY_P (g)) @@ -245,6 +246,7 @@ scm_guard (SCM guardian, SCM obj, int throw_p) else scm_hashq_create_handle_x (greedily_guarded_whash, obj, guardian); + /* njrev: this can throw a memory or out-of-range error. */ } z = scm_cons (SCM_BOOL_F, SCM_BOOL_F); @@ -265,6 +267,7 @@ scm_get_one_zombie (SCM guardian) /* This critical section barrier will be replaced by a mutex. */ SCM_CRITICAL_SECTION_START; + /* njrev: -> mutex */ if (!TCONC_EMPTYP (g->zombies)) TCONC_OUT (g->zombies, res); @@ -339,7 +342,9 @@ SCM_DEFINE (scm_guardian_destroyed_p, "guardian-destroyed?", 1, 0, 0, /* This critical section barrier will be replaced by a mutex. */ SCM_CRITICAL_SECTION_START; - + /* njrev: Critical section not needed here. (Falls into category of + stuff that is the responsibility of Scheme code, whenever + accessing data from multiple threads.) */ res = scm_from_bool (DESTROYED_P (GUARDIAN_DATA (guardian))); SCM_CRITICAL_SECTION_END; diff --git a/libguile/keywords.c b/libguile/keywords.c index 17da78c82..11e7d2e5d 100644 --- a/libguile/keywords.c +++ b/libguile/keywords.c @@ -66,6 +66,7 @@ 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; + /* njrev: NEWSMOB and hashq_set_x can raise errors */ keyword = scm_hashq_ref (scm_keyword_obarray, symbol, SCM_BOOL_F); if (scm_is_false (keyword)) { @@ -105,7 +106,7 @@ scm_from_locale_keywordn (const char *str, size_t len) return scm_symbol_to_keyword (scm_from_locale_symboln (str, len)); } - +/* njrev: critical sections reviewed so far up to here */ void scm_init_keywords () {