]> sourceware.org Git - newlib-cygwin.git/commitdiff
2001-06-22 Robert Collins rbtcollins@hotmail.com
authorRobert Collins <rbtcollins@hotmail.com>
Thu, 21 Jun 2001 22:27:20 +0000 (22:27 +0000)
committerRobert Collins <rbtcollins@hotmail.com>
Thu, 21 Jun 2001 22:27:20 +0000 (22:27 +0000)
* thread.cc (__pthread_cond_timedwait): Lock the waiting mutex before
the condition protect mutex to avoid deadlocking. (Found by Greg Smith).
(__pthread_cond_wait): Ditto.

winsup/cygwin/ChangeLog
winsup/cygwin/thread.cc

index 86341e03b3c09a77e1d7b78f1f84cbfd8fb771d7..4c2a264d61e622a02e3ac19c1257fe51a43efcb8 100644 (file)
@@ -1,3 +1,9 @@
+2001-06-22  Robert COllins  <rbbtcollins@hotmail.com>
+
+       * thread.cc (__pthread_cond_timedwait): Lock the waiting mutex before 
+       the condition protect mutex to avoid deadlocking. (Found by Greg Smith).
+       (__pthread_cond_wait): Ditto.
+       
 2001-06-30  Egor Duda  <deo@logos-m.ru>
 
        * fhandler.cc (fhandler_base::open): Work around windows bug when
index 7ab45aeeb5299fa6f177a3658df6327800ce532a..7da2a75882964105416370fae034b977b65f1701 100644 (file)
@@ -1672,9 +1672,9 @@ __pthread_cond_timedwait (pthread_cond_t * cond, pthread_mutex_t * mutex,
   if (pthread_mutex_unlock (&(*cond)->cond_access))
     system_printf ("Failed to unlock condition variable access mutex, this %0p\n", *cond);
   rv = (*cond)->TimedWait (abstime->tv_sec * 1000);
+  (*cond)->mutex->Lock ();
   if (pthread_mutex_lock (&(*cond)->cond_access))
     system_printf ("Failed to lock condition variable access mutex, this %0p\n", *cond);
-  (*cond)->mutex->Lock ();
   if (InterlockedDecrement (&((*cond)->waiting)) == 0)
     (*cond)->mutex = NULL;
   InterlockedDecrement (&((*themutex)->condwaits));
@@ -1719,9 +1719,9 @@ __pthread_cond_wait (pthread_cond_t * cond, pthread_mutex_t * mutex)
   if (pthread_mutex_unlock (&(*cond)->cond_access))
     system_printf ("Failed to unlock condition variable access mutex, this %0p\n", *cond);
   rv = (*cond)->TimedWait (INFINITE);
+  (*cond)->mutex->Lock ();
   if (pthread_mutex_lock (&(*cond)->cond_access))
     system_printf ("Failed to lock condition variable access mutex, this %0p\n", *cond);
-  (*cond)->mutex->Lock ();
   if (InterlockedDecrement (&((*cond)->waiting)) == 0)
     (*cond)->mutex = NULL;
   InterlockedDecrement (&((*themutex)->condwaits));
This page took 0.032286 seconds and 5 git commands to generate.