summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ChangeLog.pre-2-06
-rw-r--r--ChangeLog.pre-2-106
-rw-r--r--ChangeLog.pre-2-126
-rw-r--r--ChangeLog.pre-2-26
-rw-r--r--ChangeLog.pre-2-46
-rw-r--r--ChangeLog.pre-2-66
-rw-r--r--ChangeLog.pre-2-86
-rw-r--r--giowin32.c35
-rw-r--r--glib/giowin32.c35
10 files changed, 108 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,9 @@
+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
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,9 @@
+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
diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog.pre-2-12
+++ b/ChangeLog.pre-2-12
@@ -1,3 +1,9 @@
+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
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,9 @@
+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
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,9 @@
+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
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,9 @@
+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
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index ed2ae30e2..6e4c38d36 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,9 @@
+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
diff --git a/giowin32.c b/giowin32.c
index ae16dd370..30507fd5c 100644
--- a/giowin32.c
+++ b/giowin32.c
@@ -4,6 +4,7 @@
* 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
@@ -437,6 +438,14 @@ select_thread (void *parameter)
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);
@@ -449,7 +458,7 @@ select_thread (void *parameter)
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",
@@ -576,6 +585,7 @@ g_io_win32_destroy (GSource *source)
channel->watches = g_slist_remove (channel->watches, watch);
+ SetEvent (channel->data_avail_noticed_event);
g_io_channel_unref (watch->channel);
}
@@ -971,12 +981,27 @@ g_io_win32_sock_close (GIOChannel *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 *
diff --git a/glib/giowin32.c b/glib/giowin32.c
index ae16dd370..30507fd5c 100644
--- a/glib/giowin32.c
+++ b/glib/giowin32.c
@@ -4,6 +4,7 @@
* 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
@@ -437,6 +438,14 @@ select_thread (void *parameter)
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);
@@ -449,7 +458,7 @@ select_thread (void *parameter)
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",
@@ -576,6 +585,7 @@ g_io_win32_destroy (GSource *source)
channel->watches = g_slist_remove (channel->watches, watch);
+ SetEvent (channel->data_avail_noticed_event);
g_io_channel_unref (watch->channel);
}
@@ -971,12 +981,27 @@ g_io_win32_sock_close (GIOChannel *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 *