diff options
Diffstat (limited to 'libguile/async.h')
-rw-r--r-- | libguile/async.h | 34 |
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) |