summaryrefslogtreecommitdiff
path: root/libguile/async.h
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-10-02 15:28:29 +0200
committerLudovic Courtès <ludo@gnu.org>2009-10-09 14:10:03 +0200
commit46935a1fac58e50276f7e7e49e5fa6bab53c0848 (patch)
tree61a07bfd49251b8b0a7798c490f15f0beef4d552 /libguile/async.h
parentb8ec9daba60ceb14b443d3a44ab5043edcb474df (diff)
downloadguile-46935a1fac58e50276f7e7e49e5fa6bab53c0848.tar.gz
Arrange so that `SCM_I_CURRENT_THREAD' is not accessed outside of libguile.
* libguile/__scm.h (scm_async_tick): New declaration. (SCM_ASYNC_TICK)[!BUILDING_LIBGUILE]: Use `scm_async_tick ()'. * libguile/async.c (scm_critical_section_start, scm_critical_section_end, scm_async_tick): New functions. * libguile/async.h (scm_i_critical_section_mutex): Made internal. (scm_critical_section_start, scm_critical_section_end): New declarations. (SCM_CRITICAL_SECTION_START, SCM_CRITICAL_SECTION_END)[!BUILDING_LIBGUILE]: Use the same-named function (lower-case). * libguile/stackchk.h (SCM_STACK_OVERFLOW_P): Conditionalize on `BUILDING_LIBGUILE'. * libguile/threads.h (SCM_I_CURRENT_THREAD, scm_i_dynwinds, scm_i_set_dynwinds, scm_i_last_debug_frame, scm_i_set_last_debug_frame): Conditionalize on `BUILDING_LIBGUILE'.
Diffstat (limited to 'libguile/async.h')
-rw-r--r--libguile/async.h34
1 files changed, 23 insertions, 11 deletions
diff --git a/libguile/async.h b/libguile/async.h
index f666437ed..ceb2b960b 100644
--- a/libguile/async.h
+++ b/libguile/async.h
@@ -57,22 +57,34 @@ void scm_dynwind_unblock_asyncs (void);
*/
/* Defined in threads.c. */
-extern scm_i_pthread_mutex_t scm_i_critical_section_mutex;
+SCM_INTERNAL scm_i_pthread_mutex_t scm_i_critical_section_mutex;
-#define SCM_CRITICAL_SECTION_START \
- do { \
- scm_i_pthread_mutex_lock (&scm_i_critical_section_mutex);\
- SCM_I_CURRENT_THREAD->block_asyncs++; \
- SCM_I_CURRENT_THREAD->critical_section_level++; \
+SCM_API void scm_critical_section_start (void);
+SCM_API void scm_critical_section_end (void);
+
+#ifdef BUILDING_LIBGUILE
+
+# define SCM_CRITICAL_SECTION_START \
+ do { \
+ scm_i_pthread_mutex_lock (&scm_i_critical_section_mutex); \
+ SCM_I_CURRENT_THREAD->block_asyncs++; \
+ SCM_I_CURRENT_THREAD->critical_section_level++; \
} while (0)
-#define SCM_CRITICAL_SECTION_END \
- do { \
- SCM_I_CURRENT_THREAD->critical_section_level--; \
- SCM_I_CURRENT_THREAD->block_asyncs--; \
+# define SCM_CRITICAL_SECTION_END \
+ do { \
+ SCM_I_CURRENT_THREAD->critical_section_level--; \
+ SCM_I_CURRENT_THREAD->block_asyncs--; \
scm_i_pthread_mutex_unlock (&scm_i_critical_section_mutex); \
- scm_async_click (); \
+ scm_async_click (); \
} while (0)
+#else /* !BUILDING_LIBGUILE */
+
+# define SCM_CRITICAL_SECTION_START scm_critical_section_start ()
+# define SCM_CRITICAL_SECTION_END scm_critical_section_end ()
+
+#endif /* !BUILDING_LIBGUILE */
+
SCM_INTERNAL void scm_init_async (void);
#if (SCM_ENABLE_DEPRECATED == 1)