diff options
author | elliott_c <elliott_c@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2004-11-10 18:50:08 +0000 |
---|---|---|
committer | elliott_c <elliott_c@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2004-11-10 18:50:08 +0000 |
commit | fc5e927aa03f619a134c48aa22f30a45c904cda2 (patch) | |
tree | 685d07b24db20251c3ae2b15b0ba6a22bc2590b3 /ace/Service_Repository.cpp | |
parent | 8457ce322e95cb309b8ab50d8af16b42b6aa2990 (diff) | |
download | ATCD-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.cpp | 77 |
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) |