]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: finalize reqs through a temporary set
authorYehuda Sadeh <yehuda@redhat.com>
Wed, 16 Mar 2016 18:45:53 +0000 (11:45 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Wed, 16 Mar 2016 22:36:53 +0000 (15:36 -0700)
can't call _finish_request() on iter->second when iterating, it clobbers the
map.

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_http_client.cc

index 22f0bf4224da3c8df3f4a48a1b25f46994870f9c..b15ab666b6a350dc511e6eb768de90793e08b406 100644 (file)
@@ -632,9 +632,9 @@ void *RGWHTTPManager::reqs_thread_entry()
   }
 
   RWLock::WLocker rl(reqs_lock);
-  map<uint64_t, rgw_http_req_data *>::iterator iter = reqs.begin();
-  for (; iter != reqs.end(); ++iter) {
-    _finish_request(iter->second, -ECANCELED);
+  auto all_reqs = std::move(reqs);
+  for (auto iter : all_reqs) {
+    _finish_request(iter.second, -ECANCELED);
   }
 
   reqs.clear();