summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Timer.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2008-04-21 17:57:07 +0200
committerBenoit Foucher <benoit@zeroc.com>2008-04-21 17:57:07 +0200
commit0d9e14a134cba4ce19f40103e9c9615e1b0a7a86 (patch)
treea75fbec57a387ed4236eec8d5251495b7cbd7afa /cpp/src/IceUtil/Timer.cpp
parentFixed potential IceUtil::NullHandleException (diff)
downloadice-0d9e14a134cba4ce19f40103e9c9615e1b0a7a86.tar.bz2
ice-0d9e14a134cba4ce19f40103e9c9615e1b0a7a86.tar.xz
ice-0d9e14a134cba4ce19f40103e9c9615e1b0a7a86.zip
Fixed bug 2972 & 3013
Diffstat (limited to 'cpp/src/IceUtil/Timer.cpp')
-rw-r--r--cpp/src/IceUtil/Timer.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/cpp/src/IceUtil/Timer.cpp b/cpp/src/IceUtil/Timer.cpp
index 8a70432709d..a5b2175c425 100644
--- a/cpp/src/IceUtil/Timer.cpp
+++ b/cpp/src/IceUtil/Timer.cpp
@@ -32,7 +32,15 @@ Timer::destroy()
_tasks.clear();
_tokens.clear();
}
- getThreadControl().join();
+
+ if(getThreadControl() == ThreadControl())
+ {
+ getThreadControl().detach();
+ }
+ else
+ {
+ getThreadControl().join();
+ }
}
void
@@ -41,7 +49,7 @@ Timer::schedule(const TimerTaskPtr& task, const IceUtil::Time& delay)
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
if(_destroyed)
{
- return;
+ throw IllegalArgumentException(__FILE__, __LINE__, "timer destroyed");
}
IceUtil::Time time = IceUtil::Time::now(IceUtil::Time::Monotonic) + delay;
@@ -64,7 +72,7 @@ Timer::scheduleRepeated(const TimerTaskPtr& task, const IceUtil::Time& delay)
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_monitor);
if(_destroyed)
{
- return;
+ throw IllegalArgumentException(__FILE__, __LINE__, "timer destroyed");
}
const Token token(IceUtil::Time::now(IceUtil::Time::Monotonic) + delay, delay, task);