]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
test/rbd_mirror: race in TestMockImageMap.AddInstancePingPongImageTest
authorMykola Golub <mgolub@suse.com>
Fri, 2 Nov 2018 17:41:02 +0000 (19:41 +0200)
committerMykola Golub <mgolub@suse.com>
Fri, 2 Nov 2018 17:47:55 +0000 (19:47 +0200)
Remove a context from peer_ack_ctxs before completing to avoid a race
with a listener inserting a new one.

Fixes: http://tracker.ceph.com/issues/36683
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/test/rbd_mirror/test_mock_ImageMap.cc

index a82d117c93009fef951850fb79bb759b4b586bfa..e223b8b9dc6994d543416c7eecdb84b2587e6665 100644 (file)
@@ -293,8 +293,9 @@ public:
     for (auto& global_image_id : global_image_ids) {
       auto it = peer_ack_ctxs->find(global_image_id);
       ASSERT_TRUE(it != peer_ack_ctxs->end());
-      it->second->complete(ret);
+      auto ack_ctx = it->second;
       peer_ack_ctxs->erase(it);
+      ack_ctx->complete(ret);
       wait_for_scheduled_task();
     }
   }
@@ -306,8 +307,9 @@ public:
     for (auto& global_image_id : global_image_ids) {
       auto it = peer_ack_ctxs->find(global_image_id);
       ASSERT_TRUE(it != peer_ack_ctxs->end());
-      it->second->complete(ret);
+      auto ack_ctx = it->second;
       peer_ack_ctxs->erase(it);
+      ack_ctx->complete(ret);
       wait_for_scheduled_task();
       ASSERT_TRUE(wait_for_map_update(1));
     }
@@ -320,8 +322,9 @@ public:
     for (auto& global_image_id : global_image_ids) {
       auto it = peer_ack_ctxs->find(global_image_id);
       ASSERT_TRUE(it != peer_ack_ctxs->end());
-      it->second->complete(ret);
+      auto ack_ctx = it->second;
       peer_ack_ctxs->erase(it);
+      ack_ctx->complete(ret);
       ASSERT_TRUE(wait_for_map_update(1));
       ASSERT_TRUE(wait_for_listener_notify(1));
     }