diff options
author | Francisco Jerez <[email protected]> | 2015-05-09 16:01:23 +0300 |
---|---|---|
committer | Francisco Jerez <[email protected]> | 2015-05-12 15:47:57 +0300 |
commit | a533d4edf1ea346dd9e343c71b2cd500fa550ef8 (patch) | |
tree | 8281ca9c726b51967eda5d417ebc5ef8d52d2772 /src/gallium/state_trackers/clover | |
parent | 4022a468b2976c65e0d2afe9c9ac5804729e8641 (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]>
Diffstat (limited to 'src/gallium/state_trackers/clover')
-rw-r--r-- | src/gallium/state_trackers/clover/core/event.cpp | 8 |
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); |