summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-04-07 18:46:11 +0000
committernanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-04-07 18:46:11 +0000
commitfa5c9a95ba724bafcc1718bc342d1bcb0b632e83 (patch)
tree2fb15bb8d39ffc0429efc840e06e4513bca86668
parent558c3d0b572d315add72a01fa02dc96da0d68af1 (diff)
downloadATCD-fa5c9a95ba724bafcc1718bc342d1bcb0b632e83.tar.gz
Made sure find() never returns fini'ed service.
-rw-r--r--ace/Service_Repository.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/ace/Service_Repository.cpp b/ace/Service_Repository.cpp
index d7217bde3f1..0db2df28a47 100644
--- a/ace/Service_Repository.cpp
+++ b/ace/Service_Repository.cpp
@@ -134,17 +134,15 @@ ACE_Service_Repository::fini (void)
// remove services, so typically they are deleted in reverse
// order.
- for (this->current_size_--;
- this->current_size_ >= 0;
- this->current_size_--)
+ for (int i = this->current_size_ - 1; i >= 0; i--)
{
if (ACE::debug ())
ACE_DEBUG ((LM_DEBUG,
ASYS_TEXT ("finalizing %s\n"),
- this->service_vector_[this->current_size_]->name ()));
+ this->service_vector_[i]->name ()));
ACE_Service_Type *s =
ACE_const_cast (ACE_Service_Type *,
- this->service_vector_[this->current_size_]);
+ this->service_vector_[i]);
s->fini ();
}
}
@@ -213,6 +211,11 @@ ACE_Service_Repository::find_i (const ASYS_TCHAR name[],
{
if (srp != 0)
*srp = this->service_vector_[i];
+ if ((*srp)->fini_called ())
+ {
+ *srp = 0;
+ return -1;
+ }
if (ignore_suspended
&& this->service_vector_[i]->active () == 0)
return -2;