return ret;
}
+
void finish(int r) {
Mutex::Locker l(lock);
ret = r;
Mutex::Locker l(lock);
return ret;
}
+
+ RGWHTTPManager *get_manager() {
+ Mutex::Locker l(lock);
+ return mgr;
+ }
};
/*
RGWHTTPClient::~RGWHTTPClient()
{
if (req_data) {
- req_data->mgr->remove_request(this);
+ RGWHTTPManager *http_manager = req_data->get_manager();
+ if (http_manager) {
+ http_manager->remove_request(this);
+ }
req_data->put();
}
if (iter != reqs.end()) {
reqs.erase(iter);
}
+ {
+ Mutex::Locker l(req_data->lock);
+ req_data->mgr = nullptr;
+ }
if (completion_mgr) {
completion_mgr->complete(NULL, req_data->user_info);
}
}
}
+
RWLock::WLocker rl(reqs_lock);
+ for (auto r : unregistered_reqs) {
+ _finish_request(r, -ECANCELED);
+ }
+
+ unregistered_reqs.clear();
+
auto all_reqs = std::move(reqs);
for (auto iter : all_reqs) {
_finish_request(iter.second, -ECANCELED);