summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceGrid/ServerAdapterI.cpp15
-rw-r--r--cpp/src/IceGrid/ServerI.cpp30
2 files changed, 40 insertions, 5 deletions
diff --git a/cpp/src/IceGrid/ServerAdapterI.cpp b/cpp/src/IceGrid/ServerAdapterI.cpp
index ba904bdf199..08ae0d9a441 100644
--- a/cpp/src/IceGrid/ServerAdapterI.cpp
+++ b/cpp/src/IceGrid/ServerAdapterI.cpp
@@ -96,6 +96,12 @@ ServerAdapterI::activate_async(const AMD_Adapter_activatePtr& cb, const Ice::Cur
destroy();
activationFailed("server destroyed");
}
+ catch(const Ice::Exception& ex)
+ {
+ ostringstream os;
+ os << "unexpected exception: " << ex;
+ activationFailed(os.str());
+ }
}
Ice::ObjectPrx
@@ -188,7 +194,14 @@ ServerAdapterI::setDirectProxy(const Ice::ObjectPrx& prx, const Ice::Current&)
void
ServerAdapterI::destroy()
{
- _node->getAdapter()->remove(_this->ice_getIdentity());
+ try
+ {
+ _node->getAdapter()->remove(_this->ice_getIdentity());
+ }
+ catch(const Ice::LocalException&)
+ {
+ // Ignore.
+ }
}
void
diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp
index c033ff18817..9879fc99ca7 100644
--- a/cpp/src/IceGrid/ServerI.cpp
+++ b/cpp/src/IceGrid/ServerI.cpp
@@ -357,7 +357,14 @@ void
TimedServerCommand::startTimer()
{
_timerTask = new CommandTimeoutTimerTask(this);
- _timer->schedule(_timerTask, IceUtil::Time::seconds(_timeout));
+ try
+ {
+ _timer->schedule(_timerTask, IceUtil::Time::seconds(_timeout));
+ }
+ catch(const IceUtil::Exception&)
+ {
+ // Ignore, timer is destroyed because node is shutting down.
+ }
}
void
@@ -2514,7 +2521,14 @@ ServerI::setStateNoSync(InternalServerState st, const std::string& reason)
if(_activation == Always)
{
_timerTask = new DelayedStart(this, _node->getTraceLevels());
- _node->getTimer()->schedule(_timerTask, IceUtil::Time::milliSeconds(500));
+ try
+ {
+ _node->getTimer()->schedule(_timerTask, IceUtil::Time::milliSeconds(500));
+ }
+ catch(const IceUtil::Exception&)
+ {
+ // Ignore, timer is destroyed because node is shutting down.
+ }
}
else if(_activation == Disabled && _disableOnFailure > 0 && _failureTime != IceUtil::Time())
{
@@ -2526,8 +2540,16 @@ ServerI::setStateNoSync(InternalServerState st, const std::string& reason)
// callback is executed.
//
_timerTask = new DelayedStart(this, _node->getTraceLevels());
- _node->getTimer()->schedule(_timerTask,
- IceUtil::Time::seconds(_disableOnFailure) + IceUtil::Time::milliSeconds(500));
+ try
+ {
+ _node->getTimer()->schedule(_timerTask,
+ IceUtil::Time::seconds(_disableOnFailure) +
+ IceUtil::Time::milliSeconds(500));
+ }
+ catch(const IceUtil::Exception&)
+ {
+ // Ignore, timer is destroyed because node is shutting down.
+ }
}
}