+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
+2001-06-22 Andrew Lanoix <alanoix@umich.edu>
+
+ *giowin32.c: Debug and partial rewrite of async socket code
+ on windows, which fixes major MT issues. Some test code kindly
+ provided by wroberts1@home.com.
+
Thu Jun 14 14:09:46 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strconcat): Fix a use of strcat that
* giowin32.c: IO Channels for Win32.
* Copyright 1998 Owen Taylor and Tor Lillqvist
* Copyright 1999-2000 Tor Lillqvist and Craig Setera
+ * Copyright 2001 Andrew Lanoix
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
ResetEvent (channel->data_avail_noticed_event);
SetEvent (channel->data_avail_event);
+ LOCK (channel->mutex);
+ if (channel->needs_close)
+ {
+ UNLOCK (channel->mutex);
+ break;
+ }
+ UNLOCK (channel->mutex);
+
if (channel->debug)
g_print ("select_thread %#x: waiting for data_avail_noticed\n",
channel->thread_id);
channel->running = FALSE;
LOCK (channel->mutex);
- if (channel->needs_close)
+ if (channel->fd != -1)
{
if (channel->debug)
g_print ("select_thread %#x: channel fd %d needs closing\n",
channel->watches = g_slist_remove (channel->watches, watch);
+ SetEvent (channel->data_avail_noticed_event);
g_io_channel_unref (watch->channel);
}
{
GIOWin32Channel *win32_channel = (GIOWin32Channel *)channel;
- if (win32_channel->debug)
- g_print ("thread %#x: closing socket %d\n",
+ LOCK(win32_channel->mutex);
+ if (win32_channel->running)
+ {
+ if (win32_channel->debug)
+ g_print ("thread %#x: running, marking for later close\n",
+ win32_channel->thread_id);
+ win32_channel->running = FALSE;
+ win32_channel->needs_close = TRUE;
+ SetEvent(win32_channel->data_avail_noticed_event);
+ }
+ if (win32_channel->fd != -1)
+ {
+ if (win32_channel->debug)
+ g_print ("thread %#x: closing socket %d\n",
win32_channel->thread_id,
win32_channel->fd);
- closesocket (win32_channel->fd);
- win32_channel->fd = -1;
+
+ closesocket (win32_channel->fd);
+ win32_channel->fd = -1;
+ }
+ UNLOCK(win32_channel->mutex);
}
static GSource *
* giowin32.c: IO Channels for Win32.
* Copyright 1998 Owen Taylor and Tor Lillqvist
* Copyright 1999-2000 Tor Lillqvist and Craig Setera
+ * Copyright 2001 Andrew Lanoix
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
ResetEvent (channel->data_avail_noticed_event);
SetEvent (channel->data_avail_event);
+ LOCK (channel->mutex);
+ if (channel->needs_close)
+ {
+ UNLOCK (channel->mutex);
+ break;
+ }
+ UNLOCK (channel->mutex);
+
if (channel->debug)
g_print ("select_thread %#x: waiting for data_avail_noticed\n",
channel->thread_id);
channel->running = FALSE;
LOCK (channel->mutex);
- if (channel->needs_close)
+ if (channel->fd != -1)
{
if (channel->debug)
g_print ("select_thread %#x: channel fd %d needs closing\n",
channel->watches = g_slist_remove (channel->watches, watch);
+ SetEvent (channel->data_avail_noticed_event);
g_io_channel_unref (watch->channel);
}
{
GIOWin32Channel *win32_channel = (GIOWin32Channel *)channel;
- if (win32_channel->debug)
- g_print ("thread %#x: closing socket %d\n",
+ LOCK(win32_channel->mutex);
+ if (win32_channel->running)
+ {
+ if (win32_channel->debug)
+ g_print ("thread %#x: running, marking for later close\n",
+ win32_channel->thread_id);
+ win32_channel->running = FALSE;
+ win32_channel->needs_close = TRUE;
+ SetEvent(win32_channel->data_avail_noticed_event);
+ }
+ if (win32_channel->fd != -1)
+ {
+ if (win32_channel->debug)
+ g_print ("thread %#x: closing socket %d\n",
win32_channel->thread_id,
win32_channel->fd);
- closesocket (win32_channel->fd);
- win32_channel->fd = -1;
+
+ closesocket (win32_channel->fd);
+ win32_channel->fd = -1;
+ }
+ UNLOCK(win32_channel->mutex);
}
static GSource *