From: Jason Dillaman Date: Thu, 1 Jun 2017 13:29:51 +0000 (-0400) Subject: rbd-mirror: fix valgrind memcheck errors X-Git-Tag: ses5-milestone6~8^2~4^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=72785bb568c023da0ac0466906499dac59108472;p=ceph.git rbd-mirror: fix valgrind memcheck errors Signed-off-by: Jason Dillaman --- diff --git a/src/test/rbd_mirror/test_ImageReplayer.cc b/src/test/rbd_mirror/test_ImageReplayer.cc index 9ca82925322a..ec93b956c2c0 100644 --- a/src/test/rbd_mirror/test_ImageReplayer.cc +++ b/src/test/rbd_mirror/test_ImageReplayer.cc @@ -484,7 +484,10 @@ TEST_F(TestImageReplayer, StartInterrupted) TEST_F(TestImageReplayer, JournalReset) { bootstrap(); + delete m_replayer; + ASSERT_EQ(0, librbd::Journal<>::reset(m_remote_ioctx, m_remote_image_id)); + // try to recover bootstrap(); } @@ -758,6 +761,7 @@ TEST_F(TestImageReplayer, Resync_StartInterrupted) ASSERT_TRUE(m_replayer->is_replaying()); + generate_test_data(); open_remote_image(&ictx); for (int i = 0; i < TEST_IO_COUNT; ++i) { write_test_data(ictx, m_test_data, TEST_IO_SIZE * i, TEST_IO_SIZE); @@ -833,6 +837,7 @@ TEST_F(TestImageReplayer, MultipleReplayFailures_SingleEpoch) { wait_for_stopped(); unwatch(); } + close_image(ictx); } TEST_F(TestImageReplayer, MultipleReplayFailures_MultiEpoch) { @@ -881,6 +886,7 @@ TEST_F(TestImageReplayer, MultipleReplayFailures_MultiEpoch) { ASSERT_EQ(0, release_ctx.wait()); } + generate_test_data(); write_test_data(ictx, m_test_data, 0, TEST_IO_SIZE); for (uint64_t i = 0; i < 5; ++i) { @@ -1155,6 +1161,7 @@ TEST_F(TestImageReplayer, MirroringDelay) for (int i = 0; i < TEST_IO_COUNT; ++i) { write_test_data(ictx, m_test_data, TEST_IO_SIZE * i, TEST_IO_SIZE); } + close_image(ictx); sleep(DELAY / 2); stop(); diff --git a/src/test/rbd_mirror/test_mock_ImageSyncThrottler.cc b/src/test/rbd_mirror/test_mock_ImageSyncThrottler.cc index 2ce53f32bace..d3e3d28a6efa 100644 --- a/src/test/rbd_mirror/test_mock_ImageSyncThrottler.cc +++ b/src/test/rbd_mirror/test_mock_ImageSyncThrottler.cc @@ -78,7 +78,6 @@ public: void finish(int r) { on_finish->complete(r); - put(); } void get() { diff --git a/src/tools/rbd_mirror/ImageDeleter.cc b/src/tools/rbd_mirror/ImageDeleter.cc index b2eb615a7e4a..b3b1c4429d3b 100644 --- a/src/tools/rbd_mirror/ImageDeleter.cc +++ b/src/tools/rbd_mirror/ImageDeleter.cc @@ -479,11 +479,9 @@ int ImageDeleter::image_has_snapshots_and_children(IoCtx *ioctx, void ImageDeleter::complete_active_delete(int r) { dout(20) << dendl; - m_delete_lock.Lock(); - DeleteInfo *del_info = m_active_delete.release(); - assert(del_info != nullptr); - m_delete_lock.Unlock(); - del_info->notify(r); + Mutex::Locker delete_locker(m_delete_lock); + m_active_delete->notify(r); + m_active_delete.reset(); } void ImageDeleter::enqueue_failed_delete(int error_code) { diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index 3276dba3b8f6..d55e9fbfaef0 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -159,8 +159,10 @@ template class ImageReplayerAdminSocketHook : public AdminSocketHook { public: ImageReplayerAdminSocketHook(CephContext *cct, const std::string &name, - ImageReplayer *replayer) : - admin_socket(cct->get_admin_socket()) { + ImageReplayer *replayer) + : admin_socket(cct->get_admin_socket()), + lock("ImageReplayerAdminSocketHook::lock " + + replayer->get_global_image_id()) { std::string command; int r; @@ -201,15 +203,18 @@ public: } ~ImageReplayerAdminSocketHook() override { + Mutex::Locker locker(lock); for (Commands::const_iterator i = commands.begin(); i != commands.end(); ++i) { (void)admin_socket->unregister_command(i->first); delete i->second; } + commands.clear(); } bool call(std::string command, cmdmap_t& cmdmap, std::string format, bufferlist& out) override { + Mutex::Locker locker(lock); Commands::const_iterator i = commands.find(command); assert(i != commands.end()); Formatter *f = Formatter::create(format); @@ -224,6 +229,7 @@ private: typedef std::map Commands; AdminSocket *admin_socket; + Mutex lock; Commands commands; }; diff --git a/src/tools/rbd_mirror/ImageSyncThrottler.cc b/src/tools/rbd_mirror/ImageSyncThrottler.cc index 9d3123c15dfb..a199565f1cdf 100644 --- a/src/tools/rbd_mirror/ImageSyncThrottler.cc +++ b/src/tools/rbd_mirror/ImageSyncThrottler.cc @@ -42,7 +42,9 @@ struct ImageSyncThrottler::C_SyncHolder : public Context { } void finish(int r) override { + m_sync->put(); m_sync_throttler->handle_sync_finished(this); + m_on_finish->complete(r); } };