From c6d980140913307d48648058ec24da42a31fc37c Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Mon, 22 Sep 2014 10:00:39 -0400 Subject: [PATCH] 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 CC: "10.3" --- 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 ba6869d78bc..905ebc0fd02 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 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 f649ca0d296..bd6da6be4d1 100644 --- a/src/gallium/state_trackers/clover/core/memory.hpp +++ b/src/gallium/state_trackers/clover/core/memory.hpp @@ -26,6 +26,7 @@ #include #include #include +#include #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 _destroy_notify; + std::stack> _destroy_notify; protected: std::string data; -- 2.30.2