summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ObjectAdapterFactory.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2009-04-27 14:18:34 -0230
committerDwayne Boone <dwayne@zeroc.com>2009-04-27 14:18:34 -0230
commit401516d06074526382156f1c1923c3cdb9e82077 (patch)
tree2a378cfd0479631b0478b52c7c993c5046da7592 /cpp/src/Ice/ObjectAdapterFactory.cpp
parentBug 2475 - remove AMD_Array_Object_ice_invoke (diff)
downloadice-401516d06074526382156f1c1923c3cdb9e82077.tar.bz2
ice-401516d06074526382156f1c1923c3cdb9e82077.tar.xz
ice-401516d06074526382156f1c1923c3cdb9e82077.zip
Bug 3138 - remove object adapter map
Diffstat (limited to 'cpp/src/Ice/ObjectAdapterFactory.cpp')
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.cpp67
1 files changed, 28 insertions, 39 deletions
diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp
index febae697987..59c76262395 100644
--- a/cpp/src/Ice/ObjectAdapterFactory.cpp
+++ b/cpp/src/Ice/ObjectAdapterFactory.cpp
@@ -22,7 +22,7 @@ IceUtil::Shared* IceInternal::upCast(ObjectAdapterFactory* p) { return p; }
void
IceInternal::ObjectAdapterFactory::shutdown()
{
- map<string, ObjectAdapterIPtr> adapters;
+ list<ObjectAdapterIPtr> adapters;
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -48,14 +48,13 @@ IceInternal::ObjectAdapterFactory::shutdown()
// Deactivate outside the thread synchronization, to avoid
// deadlocks.
//
- for_each(adapters.begin(), adapters.end(),
- IceUtil::secondVoidMemFun<const string, ObjectAdapterI>(&ObjectAdapter::deactivate));
+ for_each(adapters.begin(), adapters.end(), IceUtil::voidMemFun(&ObjectAdapter::deactivate));
}
void
IceInternal::ObjectAdapterFactory::waitForShutdown()
{
- map<string, ObjectAdapterIPtr> adapters;
+ list<ObjectAdapterIPtr> adapters;
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -83,8 +82,7 @@ IceInternal::ObjectAdapterFactory::waitForShutdown()
//
// Now we wait for deactivation of each object adapter.
//
- for_each(adapters.begin(), adapters.end(),
- IceUtil::secondVoidMemFun<const string, ObjectAdapterI>(&ObjectAdapter::waitForDeactivate));
+ for_each(adapters.begin(), adapters.end(), IceUtil::voidMemFun(&ObjectAdapter::waitForDeactivate));
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -113,7 +111,7 @@ IceInternal::ObjectAdapterFactory::destroy()
//
waitForShutdown();
- map<string, ObjectAdapterIPtr> adapters;
+ list<ObjectAdapterIPtr> adapters;
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -123,8 +121,7 @@ IceInternal::ObjectAdapterFactory::destroy()
//
// Now we destroy each object adapter.
//
- for_each(adapters.begin(), adapters.end(),
- IceUtil::secondVoidMemFun<const string, ObjectAdapterI>(&ObjectAdapter::destroy));
+ for_each(adapters.begin(), adapters.end(), IceUtil::voidMemFun(&ObjectAdapter::destroy));
}
ObjectAdapterPtr
@@ -137,31 +134,30 @@ IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const
throw ObjectAdapterDeactivatedException(__FILE__, __LINE__);
}
- map<string, ObjectAdapterIPtr>::iterator p = _adapters.find(name);
- if(p != _adapters.end())
- {
- throw AlreadyRegisteredException(__FILE__, __LINE__, "object adapter", name);
- }
-
ObjectAdapterIPtr adapter;
if(name.empty())
{
string uuid = IceUtil::generateUUID();
adapter = new ObjectAdapterI(_instance, _communicator, this, uuid, 0, true);
- _adapters.insert(make_pair(uuid, adapter));
}
else
{
+ if(_adapterNamesInUse.find(name) != _adapterNamesInUse.end())
+ {
+ throw AlreadyRegisteredException(__FILE__, __LINE__, "object adapter", name);
+ }
+ _adapterNamesInUse.insert(name);
adapter = new ObjectAdapterI(_instance, _communicator, this, name, router, false);
- _adapters.insert(make_pair(name, adapter));
}
+
+ _adapters.push_back(adapter);
return adapter;
}
ObjectAdapterPtr
IceInternal::ObjectAdapterFactory::findObjectAdapter(const ObjectPrx& proxy)
{
- map<string, ObjectAdapterIPtr> adapters;
+ list<ObjectAdapterIPtr> adapters;
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -173,13 +169,13 @@ IceInternal::ObjectAdapterFactory::findObjectAdapter(const ObjectPrx& proxy)
adapters = _adapters;
}
- for(map<string, ObjectAdapterIPtr>::iterator p = adapters.begin(); p != adapters.end(); ++p)
+ for(list<ObjectAdapterIPtr>::iterator p = adapters.begin(); p != adapters.end(); ++p)
{
try
{
- if(p->second->isLocal(proxy))
+ if((*p)->isLocal(proxy))
{
- return p->second;
+ return *p;
}
}
catch(const ObjectAdapterDeactivatedException&)
@@ -192,7 +188,7 @@ IceInternal::ObjectAdapterFactory::findObjectAdapter(const ObjectPrx& proxy)
}
void
-IceInternal::ObjectAdapterFactory::removeObjectAdapter(const string& name)
+IceInternal::ObjectAdapterFactory::removeObjectAdapter(const ObjectAdapterPtr& adapter)
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
@@ -201,34 +197,27 @@ IceInternal::ObjectAdapterFactory::removeObjectAdapter(const string& name)
return;
}
- _adapters.erase(name);
-}
-
-namespace IceInternal {
-
-struct FlushAdapter
-{
- void operator() (ObjectAdapterIPtr p)
+ for(list<ObjectAdapterIPtr>::iterator p = _adapters.begin(); p != _adapters.end(); ++p)
{
- p->flushBatchRequests();
+ if(*p == adapter)
+ {
+ _adapters.erase(p);
+ break;
+ }
}
-};
-
+ _adapterNamesInUse.erase(adapter->getName());
}
void
IceInternal::ObjectAdapterFactory::flushBatchRequests() const
{
- list<ObjectAdapterIPtr> a;
+ list<ObjectAdapterIPtr> adapters;
{
IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
- for(map<string, ObjectAdapterIPtr>::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p)
- {
- a.push_back(p->second);
- }
+ adapters = _adapters;
}
- for_each(a.begin(), a.end(), FlushAdapter());
+ for_each(adapters.begin(), adapters.end(), IceUtil::voidMemFun(&ObjectAdapterI::flushBatchRequests));
}
IceInternal::ObjectAdapterFactory::ObjectAdapterFactory(const InstancePtr& instance,