* pthread-threads.c, pthread-threads.h (SCM_DEBUG_THREADS): Added
authorMikael Djurfeldt <djurfeldt@nada.kth.se>
Mon, 16 Dec 2002 20:29:18 +0000 (20:29 +0000)
committerMikael Djurfeldt <djurfeldt@nada.kth.se>
Mon, 16 Dec 2002 20:29:18 +0000 (20:29 +0000)
support for debugging mutex operations.

libguile/ChangeLog
libguile/pthread-threads.c
libguile/pthread-threads.h

index b13004f..631ef1c 100644 (file)
@@ -1,5 +1,8 @@
 2002-12-16  Mikael Djurfeldt  <mdj@kvast.blakulla.net>
 
+       * pthread-threads.c, pthread-threads.h (SCM_DEBUG_THREADS): Added
+       support for debugging mutex operations.
+
        * threads.c (scm_thread): Removed filed joining_threads.
        (thread_print): Print thread number as well as address of thread
        structure.
index 58410db..8aa0e6f 100644 (file)
@@ -142,6 +142,23 @@ scm_i_plugin_mutex_unlock (scm_t_mutex *mx)
   pthread_mutex_unlock (&mutex_mutex);
   return 0;
 }
+
+int
+scm_i_plugin_cond_wait (scm_t_cond *c, scm_t_mutex *mx)
+{
+  mutex *m = (mutex *) mx;
+  return pthread_cond_wait ((pthread_cond_t *) c, m->mutex);
+}
+
+int
+scm_i_plugin_cond_wait (scm_t_cond *c,
+                       scm_t_mutex *mx,
+                       const struct timespec *t)
+{
+  mutex *m = (mutex *) mx;
+  return pthread_cond_timedwait ((pthread_cond_t *) c, m->mutex, t);
+}
+
 #endif
 
 /* The following section belongs in threads.c, or rather
index 8b3d4fe..2ab3d16 100644 (file)
@@ -80,6 +80,8 @@ typedef struct { char _[SCM_MUTEX_MAXSIZE]; } scm_t_mutex;
 
 extern scm_t_mutexattr scm_i_plugin_mutex; /* The "fast" mutex. */
 
+/* This debug stuff made things a bit messy.  This needs some
+   reorganization. */
 #ifdef SCM_DEBUG_THREADS
 int scm_i_plugin_mutex_init (scm_t_mutex *, const scm_t_mutexattr *);
 int scm_i_plugin_mutex_lock (scm_t_mutex *);
@@ -134,11 +136,18 @@ int scm_i_plugin_rec_mutex_unlock (scm_t_rec_mutex *);
 #define scm_t_cond                     pthread_cond_t
 
 #define scm_i_plugin_cond_init         pthread_cond_init 
-#define scm_i_plugin_cond_destroy      pthread_cond_destroy 
+#define scm_i_plugin_cond_destroy      pthread_cond_destroy
+#ifdef SCM_DEBUG_THREADS
+int scm_i_plugin_cond_wait (scm_t_cond *, scm_t_mutex *);
+int scm_i_plugin_cond_timedwait (scm_t_cond *,
+                                scm_t_mutex *,
+                                const struct timespec *);
+#else
 #define scm_i_plugin_cond_wait(c, m) \
   pthread_cond_wait ((c), (pthread_mutex_t *) (m))
 #define scm_i_plugin_cond_timedwait(c, m, t) \
   pthread_cond_timedwait ((c), (pthread_mutex_t *) (m), (t))
+#endif
 #define scm_i_plugin_cond_signal       pthread_cond_signal 
 #define scm_i_plugin_cond_broadcast    pthread_cond_broadcast