diff options
author | schmidt <douglascraigschmidt@users.noreply.github.com> | 2007-10-19 10:39:01 +0000 |
---|---|---|
committer | schmidt <douglascraigschmidt@users.noreply.github.com> | 2007-10-19 10:39:01 +0000 |
commit | 2368425b865e863deac3da191be460ad95fa9162 (patch) | |
tree | 947918596884a78215c9ea7fecf4eb8eac3b5a7d | |
parent | 9ef161346e1c54691f6e7dbd5c46e225dc5d1b21 (diff) | |
download | ATCD-2368425b865e863deac3da191be460ad95fa9162.tar.gz |
ChangeLogTag:Fri
-rw-r--r-- | ACE/ChangeLog | 7 | ||||
-rw-r--r-- | ACE/THANKS | 1 | ||||
-rw-r--r-- | ACE/ace/Priority_Reactor.cpp | 24 | ||||
-rw-r--r-- | ACE/ace/Priority_Reactor.h | 5 |
4 files changed, 26 insertions, 11 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog index a8762ec225a..67d7b59e574 100644 --- a/ACE/ChangeLog +++ b/ACE/ChangeLog @@ -1,3 +1,10 @@ +Fri Oct 19 10:28:02 UTC 2007 Douglas C. Schmidt <schmidt@dre.vanderbilt.edu> + + * ace/Priority_Reactor.{h,cpp}: Revised the build_bucket() method + to fix some bugs when trying to remove non-existent event + handlers. Thanks to Alex Solan <alex dot solan at gmail dot + com> for reporting this. + Thu Oct 18 22:04:28 UTC 2007 Abdullah Sowayan <abdullah.sowayan@lmco.com> * bin/msvc_static_order.lst: diff --git a/ACE/THANKS b/ACE/THANKS index 2ff36b3e5a5..7702b61cdc3 100644 --- a/ACE/THANKS +++ b/ACE/THANKS @@ -2224,6 +2224,7 @@ Erman Balcik <erman dot balcik at siemens dot com> Torsten Saliwada <sally at gmx dot net> Nathan Glasser <nglasser at cantata dot com> Grégor Boirie <gregor dot boirie at free dot fr> +Alex Solan <alex dot solan at gmail dot com> I would particularly like to thank Paul Stephenson, who worked with me at Ericsson in the early 1990's. Paul devised the recursive Makefile diff --git a/ACE/ace/Priority_Reactor.cpp b/ACE/ace/Priority_Reactor.cpp index b618c72265f..cba55b0174c 100644 --- a/ACE/ace/Priority_Reactor.cpp +++ b/ACE/ace/Priority_Reactor.cpp @@ -73,7 +73,7 @@ ACE_Priority_Reactor::~ACE_Priority_Reactor (void) delete tuple_allocator_; } -void +int ACE_Priority_Reactor::build_bucket (ACE_Handle_Set &dispatch_mask, int &min_priority, int &max_priority) @@ -84,7 +84,12 @@ ACE_Priority_Reactor::build_bucket (ACE_Handle_Set &dispatch_mask, (handle = handle_iter ()) != ACE_INVALID_HANDLE; ) { - ACE_Event_Tuple et (this->handler_rep_.find (handle), + ACE_Event_Handler *event_handler = + this->handler_rep_.find (handle); + if (event_handler == 0) + return -1; + + ACE_Event_Tuple et (event_handler, handle); int prio = et.event_handler_->priority (); @@ -93,7 +98,8 @@ ACE_Priority_Reactor::build_bucket (ACE_Handle_Set &dispatch_mask, || prio > ACE_Event_Handler::HI_PRIORITY) prio = ACE_Event_Handler::LO_PRIORITY; - bucket_[prio]->enqueue_tail (et); + if (bucket_[prio]->enqueue_tail (et) == -1) + return -1; // Update the priority ranges.... if (min_priority > prio) @@ -102,6 +108,7 @@ ACE_Priority_Reactor::build_bucket (ACE_Handle_Set &dispatch_mask, max_priority = prio; } + return 0; } int @@ -124,9 +131,10 @@ ACE_Priority_Reactor::dispatch_io_set (int number_of_active_handles, int max_priority = ACE_Event_Handler::LO_PRIORITY; - (void) this->build_bucket (dispatch_mask, - min_priority, - max_priority); + if (this->build_bucket (dispatch_mask, + min_priority, + max_priority) == -1) + return -1; for (int i = max_priority; i >= min_priority; --i) { @@ -152,9 +160,7 @@ ACE_Priority_Reactor::dispatch_io_set (int number_of_active_handles, mask); if (this->state_changed_) - { - this->state_changed_ = false; // so it will not rebuild it ... - } + this->state_changed_ = false; // so it will not rebuild it ... } // Even if we are aborting the loop due to this->state_changed diff --git a/ACE/ace/Priority_Reactor.h b/ACE/ace/Priority_Reactor.h index 67edbb98497..5624fa4c9a7 100644 --- a/ACE/ace/Priority_Reactor.h +++ b/ACE/ace/Priority_Reactor.h @@ -74,8 +74,9 @@ private: /// A small helper to initialize the bucket. void init_bucket (void); - /// Build the bucket from the given dispatch_mask - void build_bucket (ACE_Handle_Set& dispatch_mask, + /// Build the bucket from the given dispatch_mask. Return -1 on + /// failure, 0 otherwise. + int build_bucket (ACE_Handle_Set& dispatch_mask, int &min_priority, int &max_priority); |