libguile/Makefile.am (snarfcppopts): Remove CFLAGS
[bpt/guile.git] / libguile / async.h
index 68952b0..00b7914 100644 (file)
@@ -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 ()