summaryrefslogtreecommitdiff
path: root/libguile/async.h
diff options
context:
space:
mode:
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)