diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/ConnectionI.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp index 3d267e765a2..d52e0867124 100644 --- a/cpp/src/Ice/ConnectionI.cpp +++ b/cpp/src/Ice/ConnectionI.cpp @@ -1216,27 +1216,29 @@ Ice::ConnectionI::setACM(const IceUtil::Optional<int>& timeout, const IceUtil::Optional<Ice::ACMHeartbeat>& heartbeat) { IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); - if(_monitor) + if(!_monitor || _state >= StateClosed) { - if(_state == StateActive) - { - _monitor->remove(this); - } - _monitor = _monitor->acm(timeout, close, heartbeat); + return; + } - if(_monitor->getACM().timeout <= 0) - { - _acmLastActivity = IceUtil::Time(); // Disable the recording of last activity. - } - else if(_acmLastActivity == IceUtil::Time() && _state == StateActive) - { - _acmLastActivity = IceUtil::Time::now(IceUtil::Time::Monotonic); - } + if(_state == StateActive) + { + _monitor->remove(this); + } + _monitor = _monitor->acm(timeout, close, heartbeat); - if(_state == StateActive) - { - _monitor->add(this); - } + if(_monitor->getACM().timeout <= 0) + { + _acmLastActivity = IceUtil::Time(); // Disable the recording of last activity. + } + else if(_acmLastActivity == IceUtil::Time() && _state == StateActive) + { + _acmLastActivity = IceUtil::Time::now(IceUtil::Time::Monotonic); + } + + if(_state == StateActive) + { + _monitor->add(this); } } |