[Mesa-dev] [PATCH] clover: Add support to mem objects for multiple destructor callbacks

Tom Stellard thomas.stellard at amd.com
Mon Sep 22 07:23:11 PDT 2014


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

CC: "10.3" <mesa-stable at lists.freedesktop.org>
---
 src/gallium/state_trackers/clover/core/memory.cpp | 11 +++++++----
 src/gallium/state_trackers/clover/core/memory.hpp |  3 ++-
 2 files changed, 9 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..134ba77 100644
--- a/src/gallium/state_trackers/clover/core/memory.cpp
+++ b/src/gallium/state_trackers/clover/core/memory.cpp
@@ -29,14 +29,17 @@ 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();
+   fprintf(stderr, "Destroying Object\n");
+   while (_destroy_notify.size()) {
+      _destroy_notify.top()();
+      _destroy_notify.pop();
+   }
 }
 
 bool
@@ -46,7 +49,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;
-- 
1.8.5.5



More information about the mesa-dev mailing list