From: Mykola Golub Date: Fri, 2 Nov 2018 17:41:02 +0000 (+0200) Subject: test/rbd_mirror: race in TestMockImageMap.AddInstancePingPongImageTest X-Git-Tag: v14.1.0~1017^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c796aecc2e424bc5774e6dd58e672502be297cbf;p=ceph.git test/rbd_mirror: race in TestMockImageMap.AddInstancePingPongImageTest 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 --- diff --git a/src/test/rbd_mirror/test_mock_ImageMap.cc b/src/test/rbd_mirror/test_mock_ImageMap.cc index a82d117c9300..e223b8b9dc69 100644 --- a/src/test/rbd_mirror/test_mock_ImageMap.cc +++ b/src/test/rbd_mirror/test_mock_ImageMap.cc @@ -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)); }