Improved error checking in bytevector->uint-list and bytevector->sint-list.
[bpt/guile.git] / libguile / async.h
index ba6c77c..ceb2b96 100644 (file)
 
 \f
 
-#define scm_mask_ints (SCM_I_CURRENT_THREAD->block_asyncs != 0)
-
-\f
-
 SCM_API void scm_async_click (void);
 SCM_API void scm_switch (void);
 SCM_API SCM scm_async (SCM thunk);
@@ -61,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;
+
+SCM_API void scm_critical_section_start (void);
+SCM_API void scm_critical_section_end (void);
 
-#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++; \
+#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)