Broadcast the condition, if there are waiting readers, as all might read
authorSebastian Wilhelmi <wilhelmi@ira.uka.de>
Mon, 29 Jan 2001 16:32:26 +0000 (16:32 +0000)
committerSebastian Wilhelmi <wilhelmi@src.gnome.org>
Mon, 29 Jan 2001 16:32:26 +0000 (16:32 +0000)
2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

* gthread.c: Broadcast the condition, if there are waiting
readers, as all might read at the same time. Only signal the
writer thread, if there are no more readers.

* gthread/gthread-impl.c (g_mutex_free_errorcheck_impl): Add
        new check to errorcheck mutexes to abort, if a locked mutex is freed.

12 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gthread.c
gthread.c
gthread/ChangeLog
gthread/gthread-impl.c

index 9e7780a..a875da4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 9e7780a..a875da4 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 9e7780a..a875da4 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 9e7780a..a875da4 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 9e7780a..a875da4 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 9e7780a..a875da4 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 9e7780a..a875da4 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 9e7780a..a875da4 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread.c: Broadcast the condition, if there are waiting
+       readers, as all might read at the same time. Only signal the
+       writer thread, if there are no more readers.
+
 2001-01-25  Tor Lillqvist  <tml@iki.fi>
 
        * makefile.mingw.in
index 479ef9c..bbb18ac 100644 (file)
@@ -517,7 +517,7 @@ static void inline g_static_rw_lock_signal (GStaticRWLock* lock)
   if (lock->want_to_write && lock->write_cond)
     g_cond_signal (lock->write_cond);
   else if (lock->read_cond)
-    g_cond_signal (lock->read_cond);
+    g_cond_broadcast (lock->read_cond);
 }
 
 void g_static_rw_lock_reader_lock (GStaticRWLock* lock)
@@ -562,7 +562,8 @@ void g_static_rw_lock_reader_unlock  (GStaticRWLock* lock)
 
   g_static_mutex_lock (&lock->mutex);
   lock->read_counter--;
-  g_static_rw_lock_signal (lock);
+  if (lock->read_counter == 0)
+    g_static_rw_lock_signal (lock);
   g_static_mutex_unlock (&lock->mutex);
 }
 
index 479ef9c..bbb18ac 100644 (file)
--- a/gthread.c
+++ b/gthread.c
@@ -517,7 +517,7 @@ static void inline g_static_rw_lock_signal (GStaticRWLock* lock)
   if (lock->want_to_write && lock->write_cond)
     g_cond_signal (lock->write_cond);
   else if (lock->read_cond)
-    g_cond_signal (lock->read_cond);
+    g_cond_broadcast (lock->read_cond);
 }
 
 void g_static_rw_lock_reader_lock (GStaticRWLock* lock)
@@ -562,7 +562,8 @@ void g_static_rw_lock_reader_unlock  (GStaticRWLock* lock)
 
   g_static_mutex_lock (&lock->mutex);
   lock->read_counter--;
-  g_static_rw_lock_signal (lock);
+  if (lock->read_counter == 0)
+    g_static_rw_lock_signal (lock);
   g_static_mutex_unlock (&lock->mutex);
 }
 
index 8288d80..551d37e 100644 (file)
@@ -1,3 +1,8 @@
+2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread-impl.c (g_mutex_free_errorcheck_impl): Add new check to
+       errorcheck mutexes to abort, if a locked mutex is freed.
+
 2001-01-03  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
        * gthread-solaris.c, gthread-posix.c: Made g_thread_min_stack_size
index c8f01d0..56e2448 100644 (file)
@@ -181,6 +181,11 @@ g_mutex_unlock_errorcheck_impl (GMutex *mutex,
 static void
 g_mutex_free_errorcheck_impl (GMutex *mutex)
 {
+  if (info && info->owner != NULL)
+    g_error ("Trying to free a locked mutex at '%s', "
+            "which was previously locked at '%s'", 
+            location, info->location);
+
   g_free (G_MUTEX_DEBUG_INFO (mutex));
   g_thread_functions_for_glib_use_default.mutex_free (mutex);  
 }