summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;