Add some assertions. Simplify and fix g_main_context_release(). Fix some

2001-07-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gmain.c: Add some assertions. Simplify and fix
	g_main_context_release(). Fix some locking bugs in
	g_main_loop_run().
This commit is contained in:
Sebastian Wilhelmi
2001-07-17 08:49:23 +00:00
committed by Sebastian Wilhelmi
parent a0832f025f
commit 1107552617
9 changed files with 69 additions and 24 deletions

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1,3 +1,9 @@
2001-07-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmain.c: Add some assertions. Simplify and fix
g_main_context_release(). Fix some locking bugs in
g_main_loop_run().
2001-07-12 Mark Murnane <Mark.Murnane@sun.com> 2001-07-12 Mark Murnane <Mark.Murnane@sun.com>
* glib/gmessages.c: Changed prototype of printf_string_upper_bound * glib/gmessages.c: Changed prototype of printf_string_upper_bound

View File

@@ -1672,7 +1672,10 @@ g_main_context_acquire (GMainContext *context)
LOCK_CONTEXT (context); LOCK_CONTEXT (context);
if (!context->owner) if (!context->owner)
context->owner = self; {
context->owner = self;
g_assert (context->owner_count == 0);
}
if (context->owner == self) if (context->owner == self)
{ {
@@ -1701,8 +1704,6 @@ void
g_main_context_release (GMainContext *context) g_main_context_release (GMainContext *context)
{ {
#ifdef G_THREAD_ENABLED #ifdef G_THREAD_ENABLED
GMainWaiter *waiter_to_notify = NULL;
if (context == NULL) if (context == NULL)
context = g_main_context_default (); context = g_main_context_default ();
@@ -1715,29 +1716,22 @@ g_main_context_release (GMainContext *context)
if (context->waiters) if (context->waiters)
{ {
waiter_to_notify = context->waiters; GMainWaiter *waiter = context->waiters->data;
gboolean loop_internal_waiter =
(waiter->mutex == g_static_mutex_get_mutex (&context->mutex));
context->waiters = g_slist_delete_link (context->waiters, context->waiters = g_slist_delete_link (context->waiters,
context->waiters); context->waiters);
if (!loop_internal_waiter)
g_mutex_lock (waiter->mutex);
g_cond_signal (waiter->cond);
if (!loop_internal_waiter)
g_mutex_unlock (waiter->mutex);
} }
} }
if (waiter_to_notify) UNLOCK_CONTEXT (context);
{
gboolean loop_internal_waiter =
(waiter_to_notify->mutex == g_static_mutex_get_mutex (&context->mutex));
if (!loop_internal_waiter)
g_mutex_lock (waiter_to_notify->mutex);
g_cond_signal (waiter_to_notify->cond);
if (!loop_internal_waiter)
g_mutex_unlock (waiter_to_notify->mutex);
else
UNLOCK_CONTEXT (context);
}
else
UNLOCK_CONTEXT (context);
return result; return result;
#endif /* G_THREAD_ENABLED */ #endif /* G_THREAD_ENABLED */
@@ -1796,7 +1790,10 @@ g_main_context_wait (GMainContext *context,
} }
if (!context->owner) if (!context->owner)
context->owner = self; {
context->owner = self;
g_assert (context->owner_count == 0);
}
if (context->owner == self) if (context->owner == self)
{ {
@@ -2384,7 +2381,6 @@ g_main_loop_run (GMainLoop *loop)
{ {
g_warning ("g_main_loop_run() was called from second thread but" g_warning ("g_main_loop_run() was called from second thread but"
"g_thread_init() was never called."); "g_thread_init() was never called.");
UNLOCK_CONTEXT (loop->context);
return; return;
} }
@@ -2405,9 +2401,10 @@ g_main_loop_run (GMainLoop *loop)
if (!loop->is_running) if (!loop->is_running)
{ {
UNLOCK_CONTEXT (loop->context);
if (got_ownership) if (got_ownership)
g_main_context_release (loop->context); g_main_context_release (loop->context);
g_main_loop_unref_and_unlock (loop); g_main_loop_unref (loop);
return; return;
} }