On Wed, 20 Feb 2013 18:42:28 -0000 "William Orr" <ay1244@xxxxxxxxx> wrote: > Chris Vine wrote: > > > On Tue, 19 Feb 2013 20:28:16 -0500 > Will Orr <ay1244@xxxxxxxxx> wrote: > > Here[1] is the problematic code. > > > > I'm trying to run a command and gather the output and return > code. I > > do this by watching for the process to return, as well as > waiting for > > the channels to HUP. However, my callbacks never get called with > cond > > set to G_IO_HUP, even after the process terminates. Nor do any > of the > > g_io_channel_read_* calls return errors. This seems inconsistent > with > > the documentation, as well as examples that I've found in the > hours of > > researching this problem. > > > > I'm clearly doing something wrong, I'm just not sure where yet. > Any > > advice or solutions would be great. Thanks so much! Let me know > if I > > need to provide anymore information. Please CC me, as I'm not a > member > > of this list. > > This will help you: > > http://www.greenend.org.uk/rjk/2001/06/poll.html > > Chris > > Is this really preferable to using g_io_add_watch? It doesn't seem > like I can make use of that in my event loop… I think you misunderstood me, and I can see that I was was overly concise. g_poll() is a wrapper on unix-like OSes for poll(). The web page to which I directed you explains why POLLHUP, and so G_IO_HUP, is not a reliable indicator of end-of-file. If you have received G_IO_HUP, you must have received a hang-up, which means on a pipe file descriptor that you must have end-of-file. However the converse is not true. You can have end-of-file without G_IO_HUP, which is what you are experiencing. You are receiving POLLIN/G_IO_IN instead. The only reliable way of detecting end-of-file is if read() returns 0. This equates to one of the GIOChannel read functions returning a GIOStatus value of G_IO_STATUS_EOF. Your mistake was in not checking return values. I have not studied your code in detail but you do not seem to be unref()ing consistently either, in particularly in a case of error. The best thing to do is to unref() the GIOChannel object as soon as you have called g_io_add_watch() or g_source_attach(). Then, returning FALSE in the callback will automatically release the object and its resources. Chris _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx https://mail.gnome.org/mailman/listinfo/gtk-list