summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFrédéric Brière <fbriere@fbriere.net>2016-01-06 15:54:43 -0500
committerFrédéric Brière <fbriere@fbriere.net>2016-01-06 16:05:19 -0500
commit69ed9203aeab319f8529a77945dd09c983538fa7 (patch)
tree6fd43f69a7e599783cdbce44ecf8bb4e6ef3d6c4 /src
parentd069536223fee363f9237d47e47793cfdccdf8d6 (diff)
downloadtwinkle-69ed9203aeab319f8529a77945dd09c983538fa7.tar
twinkle-69ed9203aeab319f8529a77945dd09c983538fa7.tar.gz
twinkle-69ed9203aeab319f8529a77945dd09c983538fa7.tar.lz
twinkle-69ed9203aeab319f8529a77945dd09c983538fa7.tar.xz
twinkle-69ed9203aeab319f8529a77945dd09c983538fa7.zip
Fix race condition over deletion of sema_logview
sema_logview may only be deleted after the logview thread has been terminated, which can only be confirmed by joining with it. (The return of pthread_cancel() merely indicates that the cancellation request was successfully queued.)
Diffstat (limited to 'src')
-rw-r--r--src/log.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/log.cpp b/src/log.cpp
index 136afd3..1f27e63 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -350,11 +350,11 @@ void t_log::enable_inform_user(bool on) {
if (!thr_logview) {
thr_logview = new t_thread(main_logview, NULL);
- thr_logview->detach();
}
} else {
if (thr_logview) {
thr_logview->cancel();
+ thr_logview->join();
delete thr_logview;
thr_logview = NULL;
}