clover: Wrap event::wait_count in a method taking care of the required locking.
authorFrancisco Jerez <currojerez@riseup.net>
Tue, 9 Jun 2015 19:52:25 +0000 (22:52 +0300)
committerJan Vesely <jan.vesely@rutgers.edu>
Wed, 20 Sep 2017 22:48:28 +0000 (18:48 -0400)
Acked-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Jan Vesely <jan.vesely@rutgers.edu>
src/gallium/state_trackers/clover/core/event.cpp
src/gallium/state_trackers/clover/core/event.hpp

index 8275e16a4dd5a22ddd06220a9adb080e6bc98883..4f8531e407ee8b1aaec3c845f4a6dab8bc1373dc 100644 (file)
@@ -27,7 +27,7 @@ using namespace clover;
 
 event::event(clover::context &ctx, const ref_vector<event> &deps,
              action action_ok, action action_fail) :
-   context(ctx), wait_count(1), _status(0),
+   context(ctx), _wait_count(1), _status(0),
    action_ok(action_ok), action_fail(action_fail) {
    for (auto &ev : deps)
       ev.chain(*this);
@@ -41,7 +41,7 @@ event::trigger_self() {
    std::lock_guard<std::mutex> lock(mutex);
    std::vector<intrusive_ref<event>> evs;
 
-   if (!--wait_count)
+   if (!--_wait_count)
       std::swap(_chain, evs);
 
    return evs;
@@ -81,10 +81,15 @@ event::abort(cl_int status) {
       ev.abort(status);
 }
 
+unsigned
+event::wait_count() const {
+   std::lock_guard<std::mutex> lock(mutex);
+   return _wait_count;
+}
+
 bool
 event::signalled() const {
-   std::lock_guard<std::mutex> lock(mutex);
-   return !wait_count;
+   return !wait_count();
 }
 
 cl_int
@@ -99,8 +104,8 @@ event::chain(event &ev) {
    std::unique_lock<std::mutex> lock_ev(ev.mutex, std::defer_lock);
    std::lock(lock, lock_ev);
 
-   if (wait_count) {
-      ev.wait_count++;
+   if (_wait_count) {
+      ev._wait_count++;
       _chain.push_back(ev);
    }
    ev.deps.push_back(*this);
@@ -112,7 +117,7 @@ event::wait() const {
       ev.wait();
 
    std::unique_lock<std::mutex> lock(mutex);
-   cv.wait(lock, [=]{ return !wait_count; });
+   cv.wait(lock, [=]{ return !_wait_count; });
 }
 
 hard_event::hard_event(command_queue &q, cl_command_type command,
index 6469e483c73db6f2e68eea9085ec64ceb8f99aa7..53dac686f8e1eacc5c88f4c88b45abb96a551a1d 100644 (file)
@@ -85,8 +85,9 @@ namespace clover {
    private:
       std::vector<intrusive_ref<event>> trigger_self();
       std::vector<intrusive_ref<event>> abort_self(cl_int status);
+      unsigned wait_count() const;
 
-      unsigned wait_count;
+      unsigned _wait_count;
       cl_int _status;
       action action_ok;
       action action_fail;