diff options
author | Ludovic Courtès <ludo@gnu.org> | 2009-10-02 15:28:29 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2009-10-09 14:10:03 +0200 |
commit | 46935a1fac58e50276f7e7e49e5fa6bab53c0848 (patch) | |
tree | 61a07bfd49251b8b0a7798c490f15f0beef4d552 /libguile/async.h | |
parent | b8ec9daba60ceb14b443d3a44ab5043edcb474df (diff) | |
download | guile-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.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) |