diff options
author | Leith Bade <leith@mapbox.com> | 2014-12-18 18:41:44 +1100 |
---|---|---|
committer | Leith Bade <leith@mapbox.com> | 2014-12-18 18:41:44 +1100 |
commit | f73eebe47c2e31a09448ba93f63452548849fea9 (patch) | |
tree | 7facb8f311165255e72b18b4017b909cac3f1ec6 /platform/default | |
parent | 6adc0e67b3c15bee8282d3e516a8d03e3db8f904 (diff) | |
download | qtlocation-mapboxgl-f73eebe47c2e31a09448ba93f63452548849fea9.tar.gz |
Add run to AssetRequest
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/asset_request_libuv.cpp | 24 |
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 |