summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>2002-02-13 02:37:29 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>2002-02-13 02:37:29 +0000
commitc03e915f09a14ac1c15dbd945a0d4ee5a5e7637e (patch)
treebe1966dc0dcdcc1138d9466306959ca825121d66
parentd0edceb21faf43360551cc5710d981127b436e0d (diff)
downloadATCD-c03e915f09a14ac1c15dbd945a0d4ee5a5e7637e.tar.gz
ChangeLogTag:Tue Feb 12 20:30:53 2002 Douglas C. Schmidt <schmidt@tango.doc.wustl.edu>
-rw-r--r--ChangeLog15
-rw-r--r--ChangeLogs/ChangeLog-02a15
-rw-r--r--ChangeLogs/ChangeLog-03a15
-rw-r--r--ace/WIN32_Proactor.cpp24
4 files changed, 59 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 6e5af42b7fa..13a9183c6a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+Tue Feb 12 20:30:53 2002 Douglas C. Schmidt <schmidt@tango.doc.wustl.edu>
+
+ * ace/WIN32_Proactor.cpp (handle_events): When the proactor
+ was called by the reactor in handle_signal() this method should
+ loop till all events are done. But the loop never got executed
+ twice because handle_events returned 1 on success and the loop
+ exits. To catch more than one notifications handle_events
+ should be called again. Even if the loop is executed twice and
+ no more events are outstanding handle_events should return 0 and
+ not -1 when calling with timeout 0. Calling
+ GetQueuedCompletionStatus with timeout value 0 returns FALSE and
+ errno "ERROR_SUCCESS". This check has to be added to
+ handle_events and 0 has to be returned. Thanks to Hartmut Quast
+ <HartmutQuast@t-online.de> for reporting this.
+
Tue Feb 12 16:18:59 2002 Ossama Othman <ossama@uci.edu>
* tests/Proactor_Test.cpp (logflag):
diff --git a/ChangeLogs/ChangeLog-02a b/ChangeLogs/ChangeLog-02a
index 6e5af42b7fa..13a9183c6a3 100644
--- a/ChangeLogs/ChangeLog-02a
+++ b/ChangeLogs/ChangeLog-02a
@@ -1,3 +1,18 @@
+Tue Feb 12 20:30:53 2002 Douglas C. Schmidt <schmidt@tango.doc.wustl.edu>
+
+ * ace/WIN32_Proactor.cpp (handle_events): When the proactor
+ was called by the reactor in handle_signal() this method should
+ loop till all events are done. But the loop never got executed
+ twice because handle_events returned 1 on success and the loop
+ exits. To catch more than one notifications handle_events
+ should be called again. Even if the loop is executed twice and
+ no more events are outstanding handle_events should return 0 and
+ not -1 when calling with timeout 0. Calling
+ GetQueuedCompletionStatus with timeout value 0 returns FALSE and
+ errno "ERROR_SUCCESS". This check has to be added to
+ handle_events and 0 has to be returned. Thanks to Hartmut Quast
+ <HartmutQuast@t-online.de> for reporting this.
+
Tue Feb 12 16:18:59 2002 Ossama Othman <ossama@uci.edu>
* tests/Proactor_Test.cpp (logflag):
diff --git a/ChangeLogs/ChangeLog-03a b/ChangeLogs/ChangeLog-03a
index 6e5af42b7fa..13a9183c6a3 100644
--- a/ChangeLogs/ChangeLog-03a
+++ b/ChangeLogs/ChangeLog-03a
@@ -1,3 +1,18 @@
+Tue Feb 12 20:30:53 2002 Douglas C. Schmidt <schmidt@tango.doc.wustl.edu>
+
+ * ace/WIN32_Proactor.cpp (handle_events): When the proactor
+ was called by the reactor in handle_signal() this method should
+ loop till all events are done. But the loop never got executed
+ twice because handle_events returned 1 on success and the loop
+ exits. To catch more than one notifications handle_events
+ should be called again. Even if the loop is executed twice and
+ no more events are outstanding handle_events should return 0 and
+ not -1 when calling with timeout 0. Calling
+ GetQueuedCompletionStatus with timeout value 0 returns FALSE and
+ errno "ERROR_SUCCESS". This check has to be added to
+ handle_events and 0 has to be returned. Thanks to Hartmut Quast
+ <HartmutQuast@t-online.de> for reporting this.
+
Tue Feb 12 16:18:59 2002 Ossama Othman <ossama@uci.edu>
* tests/Proactor_Test.cpp (logflag):
diff --git a/ace/WIN32_Proactor.cpp b/ace/WIN32_Proactor.cpp
index 9f0ccfccc2c..ec89c97f5b0 100644
--- a/ace/WIN32_Proactor.cpp
+++ b/ace/WIN32_Proactor.cpp
@@ -458,7 +458,7 @@ ACE_WIN32_Proactor::handle_signal (int, siginfo_t *, ucontext_t *)
{
result = this->handle_events (timeout);
- if (result != 0 || errno == ETIME)
+ if (result != 1)
break;
}
@@ -517,19 +517,23 @@ ACE_WIN32_Proactor::handle_events (unsigned long milli_seconds)
{
ACE_OS::set_errno_to_last_error ();
- if (errno == WAIT_TIMEOUT)
+ switch (errno)
{
+ case WAIT_TIMEOUT:
errno = ETIME;
return 0;
- }
- else
- {
+
+ case ERROR_SUCCESS:
+ // Calling GetQueuedCompletionStatus with timeout value 0
+ // returns FALSE with extended errno "ERROR_SUCCESS" errno =
+ // ETIME; ?? I don't know if this has to be done !!
+ return 0;
+
+ default:
if (ACE::debug ())
- {
- ACE_DEBUG ((LM_ERROR,
- ACE_LIB_TEXT ("%p\n"),
- ACE_LIB_TEXT ("GetQueuedCompletionStatus")));
- }
+ ACE_DEBUG ((LM_ERROR,
+ ACE_LIB_TEXT ("%p\n"),
+ ACE_LIB_TEXT ("GetQueuedCompletionStatus")));
return -1;
}
}