diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 2002-02-13 02:37:29 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 2002-02-13 02:37:29 +0000 |
commit | c03e915f09a14ac1c15dbd945a0d4ee5a5e7637e (patch) | |
tree | be1966dc0dcdcc1138d9466306959ca825121d66 | |
parent | d0edceb21faf43360551cc5710d981127b436e0d (diff) | |
download | ATCD-c03e915f09a14ac1c15dbd945a0d4ee5a5e7637e.tar.gz |
ChangeLogTag:Tue Feb 12 20:30:53 2002 Douglas C. Schmidt <schmidt@tango.doc.wustl.edu>
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | ChangeLogs/ChangeLog-02a | 15 | ||||
-rw-r--r-- | ChangeLogs/ChangeLog-03a | 15 | ||||
-rw-r--r-- | ace/WIN32_Proactor.cpp | 24 |
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; } } |