summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>2007-10-19 10:39:01 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>2007-10-19 10:39:01 +0000
commit2368425b865e863deac3da191be460ad95fa9162 (patch)
tree947918596884a78215c9ea7fecf4eb8eac3b5a7d
parent9ef161346e1c54691f6e7dbd5c46e225dc5d1b21 (diff)
downloadATCD-2368425b865e863deac3da191be460ad95fa9162.tar.gz
ChangeLogTag:Fri
-rw-r--r--ACE/ChangeLog7
-rw-r--r--ACE/THANKS1
-rw-r--r--ACE/ace/Priority_Reactor.cpp24
-rw-r--r--ACE/ace/Priority_Reactor.h5
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);