Thanks for responding. I sent out a reply in the afternoon, but it was 
waiting for approval due to the way I sent it.

I was: [Moving gtk-app-devel-list@gnome.org to BCC.]

Similar response inline...

At 09:36 PM 10/12/2006, [EMAIL PROTECTED] wrote:

>On Thu, Oct 12, 2006 at 02:41:06AM -0700, Daniel Yek wrote:
> >
> > At 02:36 AM 10/12/2006, Daniel Yek wrote:
> > >
> > >Could somebody enlighten me why after an I/O Channel operation
> > >(g_io_channel_shutdown() here), the GTK+ program started to use up 
> 100% CPU?
> > >
> > >Is it monitoring something? Do I need to undo g_io_add_watch() somehow?
> > >What operation is needed to not get into such situation?
>
>I just browsed through your program (so take my rablings with a grain of
>salt), but a couple of things strike me:
>
>   - who is writing to the writing end of the pipe? Note that writing
>     into and reading from the same pipe is not recommended (although for
>     a small test program and if you are writing small amounts of data
>     you might get away with iti ;-)
>
>   - One thing which happens easily is: when the writing side closes, the
>     reading side gets a read with 0 bytes (as a "signal" of EOF). In a
>     select() (and that is what is at GTK's core dispatching things),
>     this file descriptor is considered ready (but yielding zero bytes).
>     I don't know whether GIOChannel wraps this (I doubt it can), but this
>     is the typical cause for "spinning" in such programs.
>
>Uh. I don't know if I was clear.

Figured that out myself.

1. Closing the write-end of the pipe caused GIOConditoin of G_IO_HUP being 
generated when being polled. Failing to intercept and react to it by 
removing the Channel watch causes infinite GIOConditoin of G_IO_HUP 
"notification attempt" and hence 100% CPU usage. There should be an assert 
to guard this infinite loop in channel monitoring.

2. Closing the read-end of the pipe caused GIOConditoin of G_IO_NVAL when 
being polled. Failing to intercept and react to it by removing the Channel 
watch causes infinite GIOConditoin of G_IO_NVAL "notification attempt".

3. Shutting down the I/O Channel without removing Channel Watch again 
causes condition #2 above.

These seem like rough edges to me.

Is there any developer willing to insert asserts or implement default 
handling where appropriate?

Thanks.


-- 
Daniel Yek




>Regards
>- -- tom

_______________________________________________
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