1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-21 03:00:19 +02:00
Conflicts:
	libguile/procprop.c
This commit is contained in:
Andy Wingo 2013-11-28 15:00:17 +01:00
commit f76cf73a49
12 changed files with 359 additions and 30 deletions

View file

@ -78,6 +78,22 @@ SCM_API void scm_critical_section_end (void);
scm_async_tick (); \
} while (0)
# define scm_i_pthread_mutex_lock_block_asyncs(m) \
do \
{ \
SCM_I_CURRENT_THREAD->block_asyncs++; \
scm_i_pthread_mutex_lock (m); \
} \
while (0)
# define scm_i_pthread_mutex_unlock_unblock_asyncs(m) \
do \
{ \
scm_i_pthread_mutex_unlock (m); \
SCM_I_CURRENT_THREAD->block_asyncs--; \
} \
while (0)
#else /* !BUILDING_LIBGUILE */
# define SCM_CRITICAL_SECTION_START scm_critical_section_start ()

View file

@ -1875,6 +1875,22 @@ scm_pthread_cond_timedwait (scm_i_pthread_cond_t *cond,
#endif
static void
do_unlock_with_asyncs (void *data)
{
scm_i_pthread_mutex_unlock ((scm_i_pthread_mutex_t *)data);
SCM_I_CURRENT_THREAD->block_asyncs--;
}
void
scm_i_dynwind_pthread_mutex_lock_block_asyncs (scm_i_pthread_mutex_t *mutex)
{
SCM_I_CURRENT_THREAD->block_asyncs++;
scm_i_scm_pthread_mutex_lock (mutex);
scm_dynwind_unwind_handler (do_unlock_with_asyncs, mutex,
SCM_F_WIND_EXPLICITLY);
}
unsigned long
scm_std_usleep (unsigned long usecs)
{

View file

@ -140,6 +140,7 @@ SCM_INTERNAL void scm_init_threads (void);
SCM_INTERNAL void scm_init_thread_procs (void);
SCM_INTERNAL void scm_init_threads_default_dynamic_state (void);
SCM_INTERNAL void scm_i_dynwind_pthread_mutex_lock_block_asyncs (scm_i_pthread_mutex_t *mutex);
SCM_API SCM scm_call_with_new_thread (SCM thunk, SCM handler);
SCM_API SCM scm_yield (void);