diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/clover/core/memory.cpp | 10 | ||||
-rw-r--r-- | 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<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 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 <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; |