From c796aecc2e424bc5774e6dd58e672502be297cbf Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Fri, 2 Nov 2018 19:41:02 +0200 Subject: [PATCH] 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 --- src/test/rbd_mirror/test_mock_ImageMap.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/test/rbd_mirror/test_mock_ImageMap.cc b/src/test/rbd_mirror/test_mock_ImageMap.cc index a82d117c930..e223b8b9dc6 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)); } -- 2.47.3