summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2008-09-25 19:48:12 +0200
committerBenoit Foucher <benoit@zeroc.com>2008-09-25 19:48:12 +0200
commit93a4343980b792422c09ce0a8b9a13360ffeb211 (patch)
tree530282dd34222423f146f47d23e98ac480f2becc /cpp/src/IceGrid/ServerI.cpp
parentFixed bug 3457 (diff)
downloadice-93a4343980b792422c09ce0a8b9a13360ffeb211.tar.bz2
ice-93a4343980b792422c09ce0a8b9a13360ffeb211.tar.xz
ice-93a4343980b792422c09ce0a8b9a13360ffeb211.zip
Fixed potential IceGrid node hang on shutdown
Diffstat (limited to 'cpp/src/IceGrid/ServerI.cpp')
-rw-r--r--cpp/src/IceGrid/ServerI.cpp30
1 files changed, 26 insertions, 4 deletions
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.
+ }
}
}