summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/src/Glacier2/Blobject.cpp26
-rw-r--r--cpp/src/Glacier2/Blobject.h4
-rw-r--r--cpp/src/Glacier2/ClientBlobject.cpp46
-rw-r--r--cpp/src/Glacier2/ClientBlobject.h8
-rw-r--r--cpp/src/Glacier2/RequestQueue.cpp5
-rw-r--r--cpp/src/Glacier2/RouterI.cpp24
-rw-r--r--cpp/src/Glacier2/RouterI.h3
-rw-r--r--cpp/src/Glacier2/ServerBlobject.cpp20
-rw-r--r--cpp/src/Glacier2/ServerBlobject.h4
9 files changed, 44 insertions, 96 deletions
diff --git a/cpp/src/Glacier2/Blobject.cpp b/cpp/src/Glacier2/Blobject.cpp
index b4f1e44ae25..9fb116909da 100644
--- a/cpp/src/Glacier2/Blobject.cpp
+++ b/cpp/src/Glacier2/Blobject.cpp
@@ -55,7 +55,7 @@ Glacier2::Blobject::Blobject(const CommunicatorPtr& communicator, bool reverse)
IceUtil::Time::milliSeconds(_properties->getPropertyAsInt(serverSleepTime)) :
IceUtil::Time::milliSeconds(_properties->getPropertyAsInt(clientSleepTime));
- _requestQueue = new RequestQueue(sleepTime);
+ const_cast<RequestQueuePtr&>(_requestQueue) = new RequestQueue(sleepTime);
Int threadStackSize = _properties->getPropertyAsInt("Ice.ThreadPerConnection.StackSize");
@@ -74,11 +74,7 @@ Glacier2::Blobject::Blobject(const CommunicatorPtr& communicator, bool reverse)
out << "cannot create thread for request queue:\n" << ex;
}
- if(_requestQueue)
- {
- _requestQueue->destroy();
- _requestQueue = 0;
- }
+ _requestQueue->destroy();
throw;
}
@@ -87,17 +83,12 @@ Glacier2::Blobject::Blobject(const CommunicatorPtr& communicator, bool reverse)
Glacier2::Blobject::~Blobject()
{
- assert(!_requestQueue);
}
void
Glacier2::Blobject::destroy()
{
- if(_requestQueue)
- {
- _requestQueue->destroy();
- _requestQueue = 0;
- }
+ _requestQueue->destroy();
}
void
@@ -268,7 +259,16 @@ Glacier2::Blobject::invoke(ObjectPrx& proxy, const AMD_Array_Object_ice_invokePt
// AMI.
//
- bool override = _requestQueue->addRequest(new Request(proxy, inParams, current, _forwardContext, amdCB));
+ bool override;
+ try
+ {
+ override = _requestQueue->addRequest(new Request(proxy, inParams, current, _forwardContext, amdCB));
+ }
+ catch(const ObjectNotExistException& ex)
+ {
+ amdCB->ice_exception(ex);
+ return;
+ }
if(override && _overrideTraceLevel >= 1)
{
diff --git a/cpp/src/Glacier2/Blobject.h b/cpp/src/Glacier2/Blobject.h
index ed73d4f28bd..dca6210df05 100644
--- a/cpp/src/Glacier2/Blobject.h
+++ b/cpp/src/Glacier2/Blobject.h
@@ -16,7 +16,7 @@
namespace Glacier2
{
-class Blobject : public Ice::BlobjectArrayAsync, public IceUtil::Mutex
+class Blobject : public Ice::BlobjectArrayAsync
{
public:
@@ -42,7 +42,7 @@ private:
const bool _alwaysBatch;
const int _requestTraceLevel;
const int _overrideTraceLevel;
- RequestQueuePtr _requestQueue;
+ const RequestQueuePtr _requestQueue;
};
}
diff --git a/cpp/src/Glacier2/ClientBlobject.cpp b/cpp/src/Glacier2/ClientBlobject.cpp
index 85e0139e90a..6f91d3cd4cf 100644
--- a/cpp/src/Glacier2/ClientBlobject.cpp
+++ b/cpp/src/Glacier2/ClientBlobject.cpp
@@ -20,24 +20,12 @@ Glacier2::ClientBlobject::ClientBlobject(const CommunicatorPtr& communicator,
Glacier2::Blobject(communicator, false),
_routingTable(routingTable),
_allowCategories(allowCategories),
- _rejectTraceLevel(_properties->getPropertyAsInt("Glacier2.Client.Trace.Reject")),
- _timestamp(IceUtil::Time::now())
+ _rejectTraceLevel(_properties->getPropertyAsInt("Glacier2.Client.Trace.Reject"))
{
}
Glacier2::ClientBlobject::~ClientBlobject()
{
- assert(!_routingTable);
-}
-
-void
-Glacier2::ClientBlobject::destroy()
-{
- IceUtil::Mutex::Lock lock(*this);
-
- assert(_routingTable); // Destroyed?
- _routingTable = 0;
- Blobject::destroy();
}
void
@@ -45,15 +33,6 @@ Glacier2::ClientBlobject::ice_invoke_async(const Ice::AMD_Array_Object_ice_invok
const std::pair<const Byte*, const Byte*>& inParams,
const Current& current)
{
- IceUtil::Mutex::Lock lock(*this);
-
- if(!_routingTable) // Destroyed?
- {
- ObjectNotExistException ex(__FILE__, __LINE__);
- ex.id = current.id;
- throw ex;
- }
-
//
// If there is an _allowCategories set then enforce it.
//
@@ -93,26 +72,3 @@ Glacier2::ClientBlobject::ice_invoke_async(const Ice::AMD_Array_Object_ice_invok
invoke(proxy, amdCB, inParams, current);
}
-
-IceUtil::Time
-Glacier2::ClientBlobject::getTimestamp() const
-{
- IceUtil::Mutex::TryLock lock(*this);
-
- if(lock.acquired())
- {
- return _timestamp;
- }
- else
- {
- return IceUtil::Time::now();
- }
-}
-
-void
-Glacier2::ClientBlobject::updateTimestamp()
-{
- IceUtil::Mutex::Lock lock(*this);
-
- _timestamp = IceUtil::Time::now();
-}
diff --git a/cpp/src/Glacier2/ClientBlobject.h b/cpp/src/Glacier2/ClientBlobject.h
index e6ea3d268c6..115b1dd08eb 100644
--- a/cpp/src/Glacier2/ClientBlobject.h
+++ b/cpp/src/Glacier2/ClientBlobject.h
@@ -26,20 +26,14 @@ public:
ClientBlobject(const Ice::CommunicatorPtr&, const RoutingTablePtr&, const Ice::StringSeq&);
virtual ~ClientBlobject();
- virtual void destroy();
-
virtual void ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr&,
const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&);
- IceUtil::Time getTimestamp() const;
- void updateTimestamp();
-
private:
- RoutingTablePtr _routingTable;
+ const RoutingTablePtr _routingTable;
const std::vector<std::string> _allowCategories;
const int _rejectTraceLevel;
- mutable IceUtil::Time _timestamp;
};
}
diff --git a/cpp/src/Glacier2/RequestQueue.cpp b/cpp/src/Glacier2/RequestQueue.cpp
index 1b2cc9c005b..7e37ad0ce1f 100644
--- a/cpp/src/Glacier2/RequestQueue.cpp
+++ b/cpp/src/Glacier2/RequestQueue.cpp
@@ -252,7 +252,10 @@ Glacier2::RequestQueue::addRequest(const RequestPtr& request)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock lock(*this);
- assert(!_destroy);
+ if(_destroy)
+ {
+ throw ObjectNotExistException(__FILE__, __LINE__);
+ }
for(vector<RequestPtr>::iterator p = _requests.begin(); p != _requests.end(); ++p)
{
diff --git a/cpp/src/Glacier2/RouterI.cpp b/cpp/src/Glacier2/RouterI.cpp
index 1548617cb60..a075b20ac75 100644
--- a/cpp/src/Glacier2/RouterI.cpp
+++ b/cpp/src/Glacier2/RouterI.cpp
@@ -26,7 +26,8 @@ Glacier2::RouterI::RouterI(const ObjectAdapterPtr& clientAdapter, const ObjectAd
_connection(connection),
_userId(userId),
_session(session),
- _controlId(controlId)
+ _controlId(controlId),
+ _timestamp(IceUtil::Time::now())
{
string allow = _communicator->getProperties()->getProperty("Glacier2.AllowCategories");
StringSeq allowCategories;
@@ -143,7 +144,10 @@ Glacier2::RouterI::addProxy(const ObjectPrx& proxy, const Current& current)
ObjectProxySeq
Glacier2::RouterI::addProxies(const ObjectProxySeq& proxies, const Current& current)
{
- _clientBlobject->updateTimestamp();
+ IceUtil::Mutex::Lock lock(*this);
+
+ _timestamp = IceUtil::Time::now();
+
return _routingTable->add(proxies, current);
}
@@ -170,7 +174,10 @@ Glacier2::RouterI::destroySession(const Current&)
ClientBlobjectPtr
Glacier2::RouterI::getClientBlobject() const
{
- _clientBlobject->updateTimestamp();
+ IceUtil::Mutex::Lock lock(*this);
+
+ _timestamp = IceUtil::Time::now();
+
return _clientBlobject;
}
@@ -194,7 +201,16 @@ Glacier2::RouterI::getSession() const
IceUtil::Time
Glacier2::RouterI::getTimestamp() const
{
- return _clientBlobject->getTimestamp();
+ IceUtil::Mutex::TryLock lock(*this);
+
+ if(lock.acquired())
+ {
+ return _timestamp;
+ }
+ else
+ {
+ return IceUtil::Time::now();
+ }
}
string
diff --git a/cpp/src/Glacier2/RouterI.h b/cpp/src/Glacier2/RouterI.h
index 053cce85481..80b5f160cc0 100644
--- a/cpp/src/Glacier2/RouterI.h
+++ b/cpp/src/Glacier2/RouterI.h
@@ -22,7 +22,7 @@ namespace Glacier2
class RouterI;
typedef IceUtil::Handle<RouterI> RouterIPtr;
-class RouterI : public Router
+class RouterI : public Router, public IceUtil::Mutex
{
public:
@@ -61,6 +61,7 @@ private:
const std::string _userId;
const SessionPrx _session;
const Ice::Identity _controlId;
+ mutable IceUtil::Time _timestamp;
};
}
diff --git a/cpp/src/Glacier2/ServerBlobject.cpp b/cpp/src/Glacier2/ServerBlobject.cpp
index 5c654f52132..b1fa27ee4fb 100644
--- a/cpp/src/Glacier2/ServerBlobject.cpp
+++ b/cpp/src/Glacier2/ServerBlobject.cpp
@@ -21,17 +21,6 @@ Glacier2::ServerBlobject::ServerBlobject(const CommunicatorPtr& communicator, co
Glacier2::ServerBlobject::~ServerBlobject()
{
- assert(!_connection);
-}
-
-void
-Glacier2::ServerBlobject::destroy()
-{
- IceUtil::Mutex::Lock lock(*this);
-
- assert(_connection); // Destroyed?
- _connection = 0;
- Blobject::destroy();
}
void
@@ -39,15 +28,6 @@ Glacier2::ServerBlobject::ice_invoke_async(const Ice::AMD_Array_Object_ice_invok
const std::pair<const Byte*, const Byte*>& inParams,
const Current& current)
{
- IceUtil::Mutex::Lock lock(*this);
-
- if(!_connection) // Destroyed?
- {
- ObjectNotExistException ex(__FILE__, __LINE__);
- ex.id = current.id;
- throw ex;
- }
-
ObjectPrx proxy = _connection->createProxy(current.id);
assert(proxy);
diff --git a/cpp/src/Glacier2/ServerBlobject.h b/cpp/src/Glacier2/ServerBlobject.h
index 9f6fe6b656a..b4a6aa711ea 100644
--- a/cpp/src/Glacier2/ServerBlobject.h
+++ b/cpp/src/Glacier2/ServerBlobject.h
@@ -25,14 +25,12 @@ public:
ServerBlobject(const Ice::CommunicatorPtr&, const Ice::ConnectionPtr&);
virtual ~ServerBlobject();
- virtual void destroy();
-
virtual void ice_invoke_async(const Ice::AMD_Array_Object_ice_invokePtr&,
const std::pair<const Ice::Byte*, const Ice::Byte*>&, const Ice::Current&);
private:
- Ice::ConnectionPtr _connection;
+ const Ice::ConnectionPtr _connection;
};
}