summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/state_trackers/clover/core/memory.cpp10
-rw-r--r--src/gallium/state_trackers/clover/core/memory.hpp3
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;