]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: civetweb_callback() refer to store inside lock
authorYehuda Sadeh <yehuda@redhat.com>
Tue, 3 May 2016 18:59:11 +0000 (11:59 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Mon, 9 May 2016 23:02:48 +0000 (16:02 -0700)
pe->store might change when reconfiguring

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
(cherry picked from commit 2ca38dab071c7d20a224a4e1dacfd68548fe52dd)

src/rgw/rgw_civetweb_frontend.cc

index 557bb5b0f3e9ac8fe2aafe6de731683ef37837c2..e3df80c619a0f92fbf2f6db176d1a991073b887d 100644 (file)
@@ -8,17 +8,18 @@
 static int civetweb_callback(struct mg_connection* conn) {
   struct mg_request_info* req_info = mg_get_request_info(conn);
   RGWMongooseEnv* pe = static_cast<RGWMongooseEnv *>(req_info->user_data);
-  RGWRados* store = pe->store;
-  RGWREST* rest = pe->rest;
-  OpsLogSocket* olog = pe->olog;
-
-  RGWRequest req(store->get_new_req_id());
-  RGWMongoose client_io(conn, pe->port);
 
   {
     // hold a read lock over access to pe->store for reconfiguration
     RWLock::RLocker lock(pe->mutex);
 
+    RGWRados* store = pe->store;
+    RGWREST* rest = pe->rest;
+    OpsLogSocket* olog = pe->olog;
+
+    RGWRequest req(store->get_new_req_id());
+    RGWMongoose client_io(conn, pe->port);
+
     int ret = process_request(pe->store, rest, &req, &client_io, olog);
     if (ret < 0) {
       /* we don't really care about return code */