Mesa (10.3): clover: Add support to mem objects for multiple destructor callbacks v2

Emil Velikov evelikov at kemper.freedesktop.org
Tue Sep 23 00:21:03 UTC 2014


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

Author: Tom Stellard <thomas.stellard at amd.com>
Date:   Mon Sep 22 10:00:39 2014 -0400

clover: Add support to mem objects for multiple destructor callbacks v2

The spec says that mem objects should maintain a stack of callbacks
not just one.

v2:
  - Remove stray printf.

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

CC: "10.3" <mesa-stable at lists.freedesktop.org>
(cherry picked from commit c6d980140913307d48648058ec24da42a31fc37c)

---

 src/gallium/state_trackers/clover/core/memory.cpp |   10 ++++++----
 src/gallium/state_trackers/clover/core/memory.hpp |    3 ++-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/gallium/state_trackers/clover/core/memory.cpp b/src/gallium/state_trackers/clover/core/memory.cpp
index ba6869d..905ebc0 100644
--- a/src/gallium/state_trackers/clover/core/memory.cpp
+++ b/src/gallium/state_trackers/clover/core/memory.cpp
@@ -29,14 +29,16 @@ using namespace clover;
 memory_obj::memory_obj(clover::context &ctx, cl_mem_flags flags,
                        size_t size, void *host_ptr) :
    context(ctx), _flags(flags),
-   _size(size), _host_ptr(host_ptr),
-   _destroy_notify([]{}) {
+   _size(size), _host_ptr(host_ptr) {
    if (flags & (CL_MEM_COPY_HOST_PTR | CL_MEM_USE_HOST_PTR))
       data.append((char *)host_ptr, size);
 }
 
 memory_obj::~memory_obj() {
-   _destroy_notify();
+   while (_destroy_notify.size()) {
+      _destroy_notify.top()();
+      _destroy_notify.pop();
+   }
 }
 
 bool
@@ -46,7 +48,7 @@ memory_obj::operator==(const memory_obj &obj) const {
 
 void
 memory_obj::destroy_notify(std::function<void ()> f) {
-   _destroy_notify = f;
+   _destroy_notify.push(f);
 }
 
 cl_mem_flags
diff --git a/src/gallium/state_trackers/clover/core/memory.hpp b/src/gallium/state_trackers/clover/core/memory.hpp
index f649ca0..bd6da6b 100644
--- a/src/gallium/state_trackers/clover/core/memory.hpp
+++ b/src/gallium/state_trackers/clover/core/memory.hpp
@@ -26,6 +26,7 @@
 #include <functional>
 #include <map>
 #include <memory>
+#include <stack>
 
 #include "core/object.hpp"
 #include "core/queue.hpp"
@@ -61,7 +62,7 @@ namespace clover {
       cl_mem_flags _flags;
       size_t _size;
       void *_host_ptr;
-      std::function<void ()> _destroy_notify;
+      std::stack<std::function<void ()>> _destroy_notify;
 
    protected:
       std::string data;




More information about the mesa-commit mailing list