Mesa (master): clover: Add a mutex to guard queue::queued_events

Tom Stellard tstellar at kemper.freedesktop.org
Mon May 11 18:59:28 UTC 2015


Module: Mesa
Branch: master
Commit: f546902d9597429713c83e2caf6b69856bd7ba4d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f546902d9597429713c83e2caf6b69856bd7ba4d

Author: Tom Stellard <thomas.stellard at amd.com>
Date:   Thu May  7 13:57:14 2015 +0000

clover: Add a mutex to guard queue::queued_events

This fixes a potential crash where on a sequence like this:

Thread 0: Check if queue is not empty.
Thread 1: Remove item from queue, making it empty.
Thread 0: Do something assuming queue is not empty.

CC: 10.5 <mesa-stable at lists.freedesktop.org>

Reviewed-by: Francisco Jerez <currojerez at riseup.net>

---

 src/gallium/state_trackers/clover/core/queue.cpp |    2 ++
 src/gallium/state_trackers/clover/core/queue.hpp |    2 ++
 2 files changed, 4 insertions(+)

diff --git a/src/gallium/state_trackers/clover/core/queue.cpp b/src/gallium/state_trackers/clover/core/queue.cpp
index 24f9326..87f9dcc 100644
--- a/src/gallium/state_trackers/clover/core/queue.cpp
+++ b/src/gallium/state_trackers/clover/core/queue.cpp
@@ -44,6 +44,7 @@ command_queue::flush() {
    pipe_screen *screen = device().pipe;
    pipe_fence_handle *fence = NULL;
 
+   std::lock_guard<std::mutex> lock(queued_events_mutex);
    if (!queued_events.empty()) {
       pipe->flush(pipe, &fence, 0);
 
@@ -69,6 +70,7 @@ command_queue::profiling_enabled() const {
 
 void
 command_queue::sequence(hard_event &ev) {
+   std::lock_guard<std::mutex> lock(queued_events_mutex);
    if (!queued_events.empty())
       queued_events.back()().chain(ev);
 
diff --git a/src/gallium/state_trackers/clover/core/queue.hpp b/src/gallium/state_trackers/clover/core/queue.hpp
index b7166e6..bddb86c 100644
--- a/src/gallium/state_trackers/clover/core/queue.hpp
+++ b/src/gallium/state_trackers/clover/core/queue.hpp
@@ -24,6 +24,7 @@
 #define CLOVER_CORE_QUEUE_HPP
 
 #include <deque>
+#include <mutex>
 
 #include "core/object.hpp"
 #include "core/context.hpp"
@@ -69,6 +70,7 @@ namespace clover {
 
       cl_command_queue_properties props;
       pipe_context *pipe;
+      std::mutex queued_events_mutex;
       std::deque<intrusive_ref<hard_event>> queued_events;
    };
 }




More information about the mesa-commit mailing list