summaryrefslogtreecommitdiff
path: root/src/mbgl/storage
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/storage')
-rw-r--r--src/mbgl/storage/request_holder.cpp12
-rw-r--r--src/mbgl/storage/request_holder.hpp26
2 files changed, 38 insertions, 0 deletions
diff --git a/src/mbgl/storage/request_holder.cpp b/src/mbgl/storage/request_holder.cpp
new file mode 100644
index 0000000000..3a038623c4
--- /dev/null
+++ b/src/mbgl/storage/request_holder.cpp
@@ -0,0 +1,12 @@
+#include <mbgl/storage/request_holder.hpp>
+#include <mbgl/storage/file_source.hpp>
+#include <mbgl/util/thread_context.hpp>
+
+namespace mbgl {
+
+void RequestHolder::Deleter::operator()(Request* req) const {
+ // This function is called by the unique_ptr's Deleter.
+ util::ThreadContext::getFileSource()->cancel(req);
+}
+
+}
diff --git a/src/mbgl/storage/request_holder.hpp b/src/mbgl/storage/request_holder.hpp
new file mode 100644
index 0000000000..62edbfde7d
--- /dev/null
+++ b/src/mbgl/storage/request_holder.hpp
@@ -0,0 +1,26 @@
+#ifndef MBGL_STORAGE_REQUEST_HOLDER
+#define MBGL_STORAGE_REQUEST_HOLDER
+
+#include <memory>
+
+namespace mbgl {
+
+class Request;
+
+class RequestHolder {
+public:
+ inline RequestHolder& operator=(Request* req) {
+ ptr = std::unique_ptr<Request, Deleter>(req);
+ return *this;
+ }
+
+private:
+ struct Deleter {
+ void operator()(Request*) const;
+ };
+ std::unique_ptr<Request, Deleter> ptr;
+};
+
+}
+
+#endif