summaryrefslogtreecommitdiff
path: root/ace/Service_Repository.cpp
diff options
context:
space:
mode:
authorelliott_c <elliott_c@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-11-10 18:50:08 +0000
committerelliott_c <elliott_c@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-11-10 18:50:08 +0000
commitfc5e927aa03f619a134c48aa22f30a45c904cda2 (patch)
tree685d07b24db20251c3ae2b15b0ba6a22bc2590b3 /ace/Service_Repository.cpp
parent8457ce322e95cb309b8ab50d8af16b42b6aa2990 (diff)
downloadATCD-fc5e927aa03f619a134c48aa22f30a45c904cda2.tar.gz
ChangeLogTag: Wed Nov 10 12:42:45 2004 Chad Elliott <elliott_c@ociweb.com>
Diffstat (limited to 'ace/Service_Repository.cpp')
-rw-r--r--ace/Service_Repository.cpp77
1 files changed, 48 insertions, 29 deletions
diff --git a/ace/Service_Repository.cpp b/ace/Service_Repository.cpp
index a84a4874785..4952f95fc1b 100644
--- a/ace/Service_Repository.cpp
+++ b/ace/Service_Repository.cpp
@@ -135,7 +135,7 @@ int
ACE_Service_Repository::fini (void)
{
ACE_TRACE ("ACE_Service_Repository::fini");
- ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
+ ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
int retval = 0;
if (this->service_vector_ != 0)
@@ -170,7 +170,7 @@ int
ACE_Service_Repository::close (void)
{
ACE_TRACE ("ACE_Service_Repository::close");
- ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
+ ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
if (this->service_vector_ != 0)
{
@@ -248,7 +248,7 @@ ACE_Service_Repository::find (const ACE_TCHAR name[],
int ignore_suspended)
{
ACE_TRACE ("ACE_Service_Repository::find");
- ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
+ ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
return this->find_i (name, srp, ignore_suspended);
}
@@ -261,37 +261,56 @@ int
ACE_Service_Repository::insert (const ACE_Service_Type *sr)
{
ACE_TRACE ("ACE_Service_Repository::insert");
- ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
- int i;
+ int return_value = -1;
+ ACE_Service_Type *s = 0;
- // Check to see if this is a duplicate.
- for (i = 0; i < this->current_size_; i++)
- if (ACE_OS::strcmp (sr->name (),
- this->service_vector_[i]->name ()) == 0)
- break;
+ {
+ ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
+ int i;
+
+ // Check to see if this is a duplicate.
+ for (i = 0; i < this->current_size_; i++)
+ if (ACE_OS::strcmp (sr->name (),
+ this->service_vector_[i]->name ()) == 0)
+ break;
+
+ // Replacing an existing entry
+ if (i < this->current_size_)
+ {
+ // Check for self-assignment...
+ if (sr == this->service_vector_[i])
+ {
+ return_value = 0;
+ }
+ else
+ {
+ s = ACE_const_cast (ACE_Service_Type *,
+ this->service_vector_[i]);
+ this->service_vector_[i] = sr;
+ return_value = 0;
+ }
+ }
+ // Adding a new entry.
+ else if (i < this->total_size_)
+ {
+ this->service_vector_[i] = sr;
+ this->current_size_++;
+ return_value = 0;
+ }
+ }
- // Replacing an existing entry
- if (i < this->current_size_)
+ // delete outside the lock
+ if (s != 0)
{
- // Check for self-assignment...
- if (sr == this->service_vector_[i])
- return 0;
- ACE_Service_Type *s = ACE_const_cast (ACE_Service_Type *,
- this->service_vector_[i]);
delete s;
- this->service_vector_[i] = sr;
- return 0;
}
- // Adding a new entry.
- else if (i < this->total_size_)
+
+ if (return_value == -1)
{
- this->service_vector_[i] = sr;
- this->current_size_++;
- return 0;
+ ACE_OS::last_error (ENOSPC);
}
- ACE_OS::last_error (ENOSPC);
- return -1;
+ return return_value;
}
// Re-resume a service that was previously suspended.
@@ -301,7 +320,7 @@ ACE_Service_Repository::resume (const ACE_TCHAR name[],
const ACE_Service_Type **srp)
{
ACE_TRACE ("ACE_Service_Repository::resume");
- ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
+ ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
int i = this->find_i (name, srp, 0);
@@ -319,7 +338,7 @@ ACE_Service_Repository::suspend (const ACE_TCHAR name[],
const ACE_Service_Type **srp)
{
ACE_TRACE ("ACE_Service_Repository::suspend");
- ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
+ ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
int i = this->find_i (name, srp, 0);
if (i == -1)
@@ -340,7 +359,7 @@ ACE_Service_Repository::remove (const ACE_TCHAR name[], ACE_Service_Type **ps)
ACE_TRACE ("ACE_Service_Repository::remove");
ACE_Service_Type *s = 0;
{
- ACE_MT (ACE_GUARD_RETURN (ACE_Thread_Mutex, ace_mon, this->lock_, -1));
+ ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon, this->lock_, -1));
int i = this->find_i (name, 0, 0);
if (i == -1)