From 32064a23c1ed5e4f423e02ee624a03f9b76e54df Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 3 Jun 2018 10:08:11 +0200 Subject: [PATCH] neighbor/udisks2: move Open()/Close() calls into the I/O thread Fixes assertion failure. --- src/neighbor/plugins/UdisksNeighborPlugin.cxx | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/neighbor/plugins/UdisksNeighborPlugin.cxx b/src/neighbor/plugins/UdisksNeighborPlugin.cxx index b9ce00b3e..3a4559584 100644 --- a/src/neighbor/plugins/UdisksNeighborPlugin.cxx +++ b/src/neighbor/plugins/UdisksNeighborPlugin.cxx @@ -31,6 +31,7 @@ #include "neighbor/Explorer.hxx" #include "neighbor/Listener.hxx" #include "neighbor/Info.hxx" +#include "event/Call.hxx" #include "thread/Mutex.hxx" #include "thread/SafeSingleton.hxx" #include "util/Domain.hxx" @@ -107,6 +108,9 @@ public: List GetList() const noexcept override; private: + void DoOpen(); + void DoClose() noexcept; + void Insert(UdisksObject &&o) noexcept; void Remove(const std::string &path) noexcept; @@ -125,8 +129,8 @@ private: void *user_data) noexcept; }; -void -UdisksNeighborExplorer::Open() +inline void +UdisksNeighborExplorer::DoOpen() { using namespace ODBus; @@ -160,10 +164,14 @@ UdisksNeighborExplorer::Open() } void -UdisksNeighborExplorer::Close() noexcept +UdisksNeighborExplorer::Open() { - using namespace ODBus; + BlockingCall(GetEventLoop(), [this](){ DoOpen(); }); +} +inline void +UdisksNeighborExplorer::DoClose() noexcept +{ if (pending_list_call) { pending_list_call.Cancel(); } @@ -174,6 +182,12 @@ UdisksNeighborExplorer::Close() noexcept dbus_glue.Destruct(); } +void +UdisksNeighborExplorer::Close() noexcept +{ + BlockingCall(GetEventLoop(), [this](){ DoClose(); }); +} + template gcc_pure static const char *