From 971ab2b50f7fe2385fe9facc741e1bcd2823251e Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Wed, 20 Aug 2008 01:30:31 +0000 Subject: [PATCH] Bug 500246 - Bug fixes for giowin32 2008-08-20 Tor Lillqvist Bug 500246 - Bug fixes for giowin32 * glib/giowin32.c (read_thread) (write_thread): Change the nbytes variables to signed. (g_io_channel_win32_make_pollfd): Fix an obvious error in the file descriptor case leftover after the patch from bug #333098 on 2006-03-02. Thanks to Marcus Brinkmann. svn path=/trunk/; revision=7373 --- ChangeLog | 10 ++++++++++ glib/giowin32.c | 12 +++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b46e5460..32547cfcd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-08-20 Tor Lillqvist + + Bug 500246 - Bug fixes for giowin32 + + * glib/giowin32.c (read_thread) (write_thread): Change the nbytes + variables to signed. + (g_io_channel_win32_make_pollfd): Fix an obvious error in the file + descriptor case leftover after the patch from bug #333098 on + 2006-03-02. Thanks to Marcus Brinkmann. + 2008-08-20 Tor Lillqvist Bug 324234 - Using g_io_add_watch_full() to wait for connect() to diff --git a/glib/giowin32.c b/glib/giowin32.c index 4793ad5d7..286b6433e 100644 --- a/glib/giowin32.c +++ b/glib/giowin32.c @@ -311,7 +311,7 @@ read_thread (void *parameter) { GIOWin32Channel *channel = parameter; guchar *buffer; - guint nbytes; + gint nbytes; g_io_channel_ref ((GIOChannel *)channel); @@ -422,7 +422,7 @@ write_thread (void *parameter) { GIOWin32Channel *channel = parameter; guchar *buffer; - guint nbytes; + gint nbytes; g_io_channel_ref ((GIOChannel *)channel); @@ -2095,8 +2095,14 @@ g_io_channel_win32_make_pollfd (GIOChannel *channel, fd->fd = (gintptr) win32_channel->data_avail_event; - if (win32_channel->thread_id == 0 && (condition & G_IO_IN)) + if (win32_channel->thread_id == 0) { + /* Is it meaningful for a file descriptor to be polled for + * both IN and OUT? For what kind of file descriptor would + * that be? Doesn't seem to make sense, in practise the file + * descriptors handled here are always read or write ends of + * pipes surely, and thus unidirectional. + */ if (condition & G_IO_IN) create_thread (win32_channel, condition, read_thread); else if (condition & G_IO_OUT)