From 9f03876ba4aef09f5b93905f90df9a7b9d1073e4 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 23 Mar 2016 14:44:23 -0500 Subject: fix UsbManager dtor issue found by valgrind --- src/usb-manager.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/usb-manager.cpp b/src/usb-manager.cpp index f67f0e2..4d750c0 100644 --- a/src/usb-manager.cpp +++ b/src/usb-manager.cpp @@ -58,6 +58,9 @@ public: ~Impl() { + if (m_restart_idle_tag) + g_source_remove(m_restart_idle_tag); + clear(); } @@ -103,7 +106,12 @@ private: m_req.respond(response); if (remember_choice && (response == AdbdClient::PKResponse::ALLOW)) write_public_key(m_req.public_key); - g_idle_add([](gpointer gself){static_cast(gself)->restart(); return G_SOURCE_REMOVE;}, this); + m_restart_idle_tag = g_idle_add([](gpointer gself){ + auto self = static_cast(gself); + self->m_restart_idle_tag = 0; + self->restart(); + return G_SOURCE_REMOVE; + }, this); } )); } @@ -143,6 +151,8 @@ private: const std::string m_public_keys_filename; const std::shared_ptr m_usb_monitor; const std::shared_ptr m_greeter; + + unsigned int m_restart_idle_tag {}; std::shared_ptr m_adbd_client; AdbdClient::PKRequest m_req; -- cgit v1.2.3