+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
+Mon Feb 1 19:04:28 1999 Owen Taylor <otaylor@redhat.com>
+
+ * gmain.c (g_main_iterate): Release the main_loop
+ lock around calls to prepare() and check() so
+ that we are not holding the main loop lock
+ over user code.
+
1999-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
- * configure.in: Moved the check for MT save function variants
+ * configure.in: Moved the check for MT safe function variants
after the determination of the MT cflags and use them there.
1999-01-29 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
continue;
}
- in_check_or_prepare++;
- if (hook->flags & G_SOURCE_READY ||
- ((GSourceFuncs *) hook->func)->prepare (source->source_data,
- ¤t_time,
- &source_timeout))
+ if (!(hook->flags & G_SOURCE_READY))
{
+ gboolean (*prepare) (gpointer source_data,
+ GTimeVal *current_time,
+ gint *timeout);
+
+ prepare = ((GSourceFuncs *) hook->func)->prepare;
+ in_check_or_prepare++;
+ G_UNLOCK (main_loop);
+
+ if ((*prepare) (source->source_data, ¤t_time, &source_timeout))
+ hook->flags |= G_SOURCE_READY;
+
+ G_LOCK (main_loop);
in_check_or_prepare--;
+ }
+
+ if (hook->flags & G_SOURCE_READY)
+ {
if (!dispatch)
{
- hook->flags |= G_SOURCE_READY;
g_hook_unref (&source_list, hook);
G_UNLOCK (main_loop);
}
else
{
- hook->flags |= G_SOURCE_READY;
n_ready++;
current_priority = source->priority;
timeout = 0;
}
}
- else
- in_check_or_prepare--;
if (source_timeout >= 0)
{
continue;
}
- in_check_or_prepare++;
- if (hook->flags & G_SOURCE_READY ||
- ((GSourceFuncs *) hook->func)->check (source->source_data,
- ¤t_time))
+ if (!(hook->flags & G_SOURCE_READY))
{
+ gboolean (*check) (gpointer source_data,
+ GTimeVal *current_time);
+
+ check = ((GSourceFuncs *) hook->func)->check;
+ in_check_or_prepare++;
+ G_UNLOCK (main_loop);
+
+ if ((*check) (source->source_data, ¤t_time))
+ hook->flags |= G_SOURCE_READY;
+
+ G_LOCK (main_loop);
in_check_or_prepare--;
+ }
+
+ if (hook->flags & G_SOURCE_READY)
+ {
if (dispatch)
{
hook->flags &= ~G_SOURCE_READY;
return TRUE;
}
}
- else
- in_check_or_prepare--;
hook = g_hook_next_valid (&source_list, hook, TRUE);
}
if (in_check_or_prepare)
{
g_warning ("g_main_iteration(): called recursively from within a source's check() or "
- "prepare() member, iteration not possible");
+ "prepare() member or from a second thread, iteration not possible");
return FALSE;
}
else
if (in_check_or_prepare)
{
g_warning ("g_main_run(): called recursively from within a source's check() or "
- "prepare() member, iteration not possible");
+ "prepare() member or from a second thread, iteration not possible");
return;
}
continue;
}
- in_check_or_prepare++;
- if (hook->flags & G_SOURCE_READY ||
- ((GSourceFuncs *) hook->func)->prepare (source->source_data,
- ¤t_time,
- &source_timeout))
+ if (!(hook->flags & G_SOURCE_READY))
{
+ gboolean (*prepare) (gpointer source_data,
+ GTimeVal *current_time,
+ gint *timeout);
+
+ prepare = ((GSourceFuncs *) hook->func)->prepare;
+ in_check_or_prepare++;
+ G_UNLOCK (main_loop);
+
+ if ((*prepare) (source->source_data, ¤t_time, &source_timeout))
+ hook->flags |= G_SOURCE_READY;
+
+ G_LOCK (main_loop);
in_check_or_prepare--;
+ }
+
+ if (hook->flags & G_SOURCE_READY)
+ {
if (!dispatch)
{
- hook->flags |= G_SOURCE_READY;
g_hook_unref (&source_list, hook);
G_UNLOCK (main_loop);
}
else
{
- hook->flags |= G_SOURCE_READY;
n_ready++;
current_priority = source->priority;
timeout = 0;
}
}
- else
- in_check_or_prepare--;
if (source_timeout >= 0)
{
continue;
}
- in_check_or_prepare++;
- if (hook->flags & G_SOURCE_READY ||
- ((GSourceFuncs *) hook->func)->check (source->source_data,
- ¤t_time))
+ if (!(hook->flags & G_SOURCE_READY))
{
+ gboolean (*check) (gpointer source_data,
+ GTimeVal *current_time);
+
+ check = ((GSourceFuncs *) hook->func)->check;
+ in_check_or_prepare++;
+ G_UNLOCK (main_loop);
+
+ if ((*check) (source->source_data, ¤t_time))
+ hook->flags |= G_SOURCE_READY;
+
+ G_LOCK (main_loop);
in_check_or_prepare--;
+ }
+
+ if (hook->flags & G_SOURCE_READY)
+ {
if (dispatch)
{
hook->flags &= ~G_SOURCE_READY;
return TRUE;
}
}
- else
- in_check_or_prepare--;
hook = g_hook_next_valid (&source_list, hook, TRUE);
}
if (in_check_or_prepare)
{
g_warning ("g_main_iteration(): called recursively from within a source's check() or "
- "prepare() member, iteration not possible");
+ "prepare() member or from a second thread, iteration not possible");
return FALSE;
}
else
if (in_check_or_prepare)
{
g_warning ("g_main_run(): called recursively from within a source's check() or "
- "prepare() member, iteration not possible");
+ "prepare() member or from a second thread, iteration not possible");
return;
}