aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Tsou <tom@tsou.cc>2014-11-21 12:25:22 -0800
committerTom Tsou <tom@tsou.cc>2014-12-15 16:20:15 -0700
commitb99975917585dc8973cc806a5da0aa3fc791b198 (patch)
tree559b7103e3c903f4f3f4c251798c9380ea75e579
parent1ae25561fa3f6fe8295526b28031686c1123a8b6 (diff)
CommonLibs: Add thread cancellation capability
For clean shutdown in the transceiver we need to cancel and join running threads for orderly unwinding. Thread cancellation points already exist, so we just need to be able to call on the threads to exit out when stopping or shutting down. Don't error when joining a NULL thread, which would be the case if a thread was stopped before ever being started to begin with. Signed-off-by: Tom Tsou <tom@tsou.cc>
-rw-r--r--CommonLibs/Threads.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/CommonLibs/Threads.h b/CommonLibs/Threads.h
index a38a73a..47c7275 100644
--- a/CommonLibs/Threads.h
+++ b/CommonLibs/Threads.h
@@ -172,8 +172,15 @@ class Thread {
void start(void *(*task)(void*), void *arg);
/** Join a thread that will stop on its own. */
- void join() { int s = pthread_join(mThread,NULL); assert(!s); mThread = 0; }
+ void join() {
+ if (mThread) {
+ int s = pthread_join(mThread, NULL);
+ assert(!s);
+ }
+ }
+ /** Send cancelation to thread */
+ void cancel() { pthread_cancel(mThread); }
};