summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancisco Jerez <[email protected]>2015-05-09 16:01:23 +0300
committerFrancisco Jerez <[email protected]>2015-05-12 15:47:57 +0300
commita533d4edf1ea346dd9e343c71b2cd500fa550ef8 (patch)
tree8281ca9c726b51967eda5d417ebc5ef8d52d2772
parent4022a468b2976c65e0d2afe9c9ac5804729e8641 (diff)
clover: Implement locking of the wait_count, _chain and _status members of event.
Tested-by: Tom Stellard <[email protected]> CC: 10.5 <[email protected]>
-rw-r--r--src/gallium/state_trackers/clover/core/event.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/state_trackers/clover/core/event.cpp b/src/gallium/state_trackers/clover/core/event.cpp
index 969d19a54ae..e1f9de07f83 100644
--- a/src/gallium/state_trackers/clover/core/event.cpp
+++ b/src/gallium/state_trackers/clover/core/event.cpp
@@ -38,6 +38,7 @@ event::~event() {
std::vector<intrusive_ref<event>>
event::trigger_self() {
+ std::lock_guard<std::mutex> lock(mutex);
std::vector<intrusive_ref<event>> evs;
if (!--wait_count)
@@ -61,6 +62,7 @@ event::trigger() {
std::vector<intrusive_ref<event>>
event::abort_self(cl_int status) {
+ std::lock_guard<std::mutex> lock(mutex);
std::vector<intrusive_ref<event>> evs;
_status = status;
@@ -81,16 +83,22 @@ event::abort(cl_int status) {
bool
event::signalled() const {
+ std::lock_guard<std::mutex> lock(mutex);
return !wait_count;
}
cl_int
event::status() const {
+ std::lock_guard<std::mutex> lock(mutex);
return _status;
}
void
event::chain(event &ev) {
+ std::unique_lock<std::mutex> lock(mutex, std::defer_lock);
+ std::unique_lock<std::mutex> lock_ev(ev.mutex, std::defer_lock);
+ std::lock(lock, lock_ev);
+
if (wait_count) {
ev.wait_count++;
_chain.push_back(ev);