On Wed, 9 Sep 2009 12:23:07 -0400 (EDT)
Marshall Lake <ml...@mlake.net> wrote:

> 
> 
> >> I tried G_PRIORITY_HIGH_IDLE with similar results ... the idle
> >> function is called only with the following code:
> >>
> >>      g_idle_add_full (G_PRIORITY_HIGH_IDLE, (GSourceFunc)
> >> idlefunc, NULL, NULL); while (gtk_events_pending ())
> >>          gtk_main_iteration ();
> >>
> >> If the while loop is not part of the coding then the idle function 
> >> (idlefunc) is not called.
> >>
> >> The difference with using G_PRIORITY_HIGH_IDLE is that some of the 
> >> buttons inside the dialogs drawn in the idle function are not 
> >> displayed.  But they still react to user clicks if clicked in the
> >> right area.  I expect this is linked to your "GDK drawing
> >> functions" statement above.
> 
> > Then you must have some function blocking between your call to
> > g_idle_add_full() and control returning to the main loop.
> >
> > Anything in a GTK+ signal or event handler must not block.  This
> > means in practice that nothing should block after your call to
> > gtk_main().
> 
> After spending more time with my code I'm just not seeing it.  Below
> is the pertinent code.
> 
> AddName() is called from a drop-down menu item.
> 
> Via debug code I've seen that the program flow is as it should be ...
> all functions are exited.  The first idle function (PlayNetGame()) is
> added, executed, and exited as it should be.  The second idle
> function (PlayTheGame()) is added but is never called.
> 
> Does anyone see what might be blocking the call of PlayTheGame() or
> have any other suggestions?

I have not tried to find it in the code, but as your application is
multi-threaded you are showing the symptoms of a deadlock, either by
recursive locking or more likely by out of order locking.  Can you run
the code through a deadlock checker, or if not can you by appropriate
breakpoints find out if it is occurring in a mutex lock?

Although not relevant to your problem I should add to my comment that
you should not block after your call to gtk_main().  You can block in a
further recursive call to gtk_main() (modal dialogs generally do that)
but that is fine as main loop events continue to be serviced.

Chris
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to