summaryrefslogtreecommitdiff
path: root/platform/default
diff options
context:
space:
mode:
authorLeith Bade <leith@mapbox.com>2014-12-18 18:41:44 +1100
committerLeith Bade <leith@mapbox.com>2014-12-18 18:41:44 +1100
commitf73eebe47c2e31a09448ba93f63452548849fea9 (patch)
tree7facb8f311165255e72b18b4017b909cac3f1ec6 /platform/default
parent6adc0e67b3c15bee8282d3e516a8d03e3db8f904 (diff)
downloadqtlocation-mapboxgl-f73eebe47c2e31a09448ba93f63452548849fea9.tar.gz
Add run to AssetRequest
Diffstat (limited to 'platform/default')
-rw-r--r--platform/default/asset_request_libuv.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/platform/default/asset_request_libuv.cpp b/platform/default/asset_request_libuv.cpp
index 0e0b7280a7..c77bb57de8 100644
--- a/platform/default/asset_request_libuv.cpp
+++ b/platform/default/asset_request_libuv.cpp
@@ -30,8 +30,16 @@ struct AssetRequestBaton {
uv_buf_t buffer;
};
-AssetRequestBaton::AssetRequestBaton(AssetRequest *request_, const std::string &path, uv_loop_t *loop)
- : threadId(std::this_thread::get_id()), request(request_) {
+void AssetRequestBaton::run(AssetRequestBaton *ptr) {
+ assert(std::this_thread::get_id() == ptr->threadId);
+
+ if (ptr->canceled || !ptr->request) {
+ // Either the AssetRequest object has been destructed, or the
+ // request was canceled.
+ cleanup(ptr);
+ return;
+ }
+
req.data = this;
uv_fs_open(loop, &req, path.c_str(), O_RDONLY, S_IRUSR, fileOpened);
}
@@ -48,11 +56,17 @@ void AssetRequestBaton::cancel() {
uv_cancel((uv_req_t *)&req);
}
-void AssetRequestBaton::notifyError(uv_fs_t *req) {
- AssetRequestBaton *ptr = reinterpret_cast<AssetRequestBaton *>(req->data);
+void AssetRequestBaton::run(AssetRequestBaton *ptr) {
assert(std::this_thread::get_id() == ptr->threadId);
- if (ptr->request && req->result < 0 && !ptr->canceled && req->result != UV_ECANCELED) {
+ if (ptr->canceled || !ptr->request) {
+ // Either the AssetRequest object has been destructed, or the
+ // request was canceled.
+ cleanup(ptr);
+ return;
+ }
+
+ rf (ptr->request && req->result < 0 && !ptr->canceled && req->result != UV_ECANCELED) {
ptr->request->response = util::make_unique<Response>();
ptr->request->response->code = req->result == UV_ENOENT ? 404 : 500;
#if UV_VERSION_MAJOR == 0 && UV_VERSION_MINOR <= 10