summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2016-10-04 14:03:07 (GMT)
committerKevin Smith <kevin.smith@isode.com>2016-10-21 07:26:16 (GMT)
commitda871d063e4c24d64317b5a2df69a59e3b60c9b7 (patch)
treee06b5f6ea7b9f2a1ec18ffa77ea598281232d789 /Swiften
parent687c1082c26ccad85d905d256f8f9d41388aa299 (diff)
downloadswift-da871d063e4c24d64317b5a2df69a59e3b60c9b7.zip
swift-da871d063e4c24d64317b5a2df69a59e3b60c9b7.tar.bz2
Fix data-race in DummyEventLoop::processEvents()
Previously DummyEventLoop::processEvents() wrote to the hasEvents_ member without having locked the corresponding mutex. Changed code to use C++11 atomics instead. Test-Information: All unit tests pass on macOS 10.12. Change-Id: I13aa1566d55b7c0098f927e9c8061547f7056f5d
Diffstat (limited to 'Swiften')
-rw-r--r--Swiften/EventLoop/DummyEventLoop.cpp8
-rw-r--r--Swiften/EventLoop/DummyEventLoop.h6
2 files changed, 5 insertions, 9 deletions
diff --git a/Swiften/EventLoop/DummyEventLoop.cpp b/Swiften/EventLoop/DummyEventLoop.cpp
index d47124b..4dfbac3 100644
--- a/Swiften/EventLoop/DummyEventLoop.cpp
+++ b/Swiften/EventLoop/DummyEventLoop.cpp
@@ -6,16 +6,16 @@
#include <Swiften/EventLoop/DummyEventLoop.h>
-#include <iostream>
+#include <Swiften/Base/Log.h>
namespace Swift {
-DummyEventLoop::DummyEventLoop() : hasEvents_(false) {
+DummyEventLoop::DummyEventLoop() {
}
DummyEventLoop::~DummyEventLoop() {
if (hasEvents()) {
- std::cerr << "DummyEventLoop: Unhandled events at destruction time" << std::endl;
+ SWIFT_LOG(warning) << "DummyEventLoop: Unhandled events at destruction time" << std::endl;
}
}
@@ -27,12 +27,10 @@ void DummyEventLoop::processEvents() {
}
bool DummyEventLoop::hasEvents() {
- std::lock_guard<std::mutex> lock(hasEventsMutex_);
return hasEvents_;
}
void DummyEventLoop::eventPosted() {
- std::lock_guard<std::mutex> lock(hasEventsMutex_);
hasEvents_ = true;
}
diff --git a/Swiften/EventLoop/DummyEventLoop.h b/Swiften/EventLoop/DummyEventLoop.h
index e411096..da2a360 100644
--- a/Swiften/EventLoop/DummyEventLoop.h
+++ b/Swiften/EventLoop/DummyEventLoop.h
@@ -6,8 +6,7 @@
#pragma once
-#include <deque>
-#include <mutex>
+#include <atomic>
#include <Swiften/Base/API.h>
#include <Swiften/EventLoop/EventLoop.h>
@@ -25,7 +24,6 @@ namespace Swift {
virtual void eventPosted();
private:
- bool hasEvents_;
- std::mutex hasEventsMutex_;
+ std::atomic<bool> hasEvents_ = ATOMIC_VAR_INIT(false);
};
}