The spec says that mem objects should maintain a stack of callbacks not just one.
CC: "10.3" <mesa-sta...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev