X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/f82f62944a4e605d385f40b5a4a01e19677bc0b3..5dae693cb5f8f082b3188f3dc955d1f86fe6a50a:/libguile/async.h diff --git a/libguile/async.h b/libguile/async.h index 68952b055..00b791449 100644 --- a/libguile/async.h +++ b/libguile/async.h @@ -3,7 +3,8 @@ #ifndef SCM_ASYNC_H #define SCM_ASYNC_H -/* Copyright (C) 1995,1996,1997,1998,2000,2001, 2002, 2004, 2005, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. +/* Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2008, 2009, 2011 + * 2014 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -44,10 +45,10 @@ SCM_API SCM scm_run_asyncs (SCM list_of_a); SCM_API SCM scm_noop (SCM args); SCM_API SCM scm_call_with_blocked_asyncs (SCM proc); SCM_API SCM scm_call_with_unblocked_asyncs (SCM proc); -void *scm_c_call_with_blocked_asyncs (void *(*p) (void *d), void *d); -void *scm_c_call_with_unblocked_asyncs (void *(*p) (void *d), void *d); -void scm_dynwind_block_asyncs (void); -void scm_dynwind_unblock_asyncs (void); +SCM_API void *scm_c_call_with_blocked_asyncs (void *(*p) (void *d), void *d); +SCM_API void *scm_c_call_with_unblocked_asyncs (void *(*p) (void *d), void *d); +SCM_API void scm_dynwind_block_asyncs (void); +SCM_API void scm_dynwind_unblock_asyncs (void); /* Critical sections */ @@ -78,6 +79,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 ()