aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-10-01 20:39:50 +0200
committerMax Kellermann <max@duempel.org>2014-10-01 20:39:50 +0200
commit579912e52f371c07583e09095a5b89bfe88e872a (patch)
tree653abe6d613f364580d6e77e10eb27671a51cf32
parent1b5ec3e3cacea82e7d667e23b6f31811fc37dd49 (diff)
downloadmpd-579912e52f371c07583e09095a5b89bfe88e872a.tar.gz
mpd-579912e52f371c07583e09095a5b89bfe88e872a.tar.xz
mpd-579912e52f371c07583e09095a5b89bfe88e872a.zip
lib/nfs/Glue: destruct the NfsManager in the I/O thread
This allows eliminating the indirection code from the NfsConnection destructor.
Diffstat (limited to '')
-rw-r--r--src/lib/nfs/Connection.cxx7
-rw-r--r--src/lib/nfs/Connection.hxx3
-rw-r--r--src/lib/nfs/Glue.cxx3
3 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/nfs/Connection.cxx b/src/lib/nfs/Connection.cxx
index 13f7cd89c..934cf0a49 100644
--- a/src/lib/nfs/Connection.cxx
+++ b/src/lib/nfs/Connection.cxx
@@ -22,9 +22,9 @@
#include "Lease.hxx"
#include "Domain.hxx"
#include "Callback.hxx"
+#include "event/Loop.hxx"
#include "system/fd_util.h"
#include "util/Error.hxx"
-#include "event/Call.hxx"
extern "C" {
#include <nfsc/libnfs.h>
@@ -123,14 +123,13 @@ events_to_libnfs(unsigned i)
NfsConnection::~NfsConnection()
{
+ assert(SocketMonitor::GetEventLoop().IsInside());
assert(new_leases.empty());
assert(active_leases.empty());
assert(callbacks.IsEmpty());
if (context != nullptr)
- BlockingCall(SocketMonitor::GetEventLoop(), [this](){
- DestroyContext();
- });
+ DestroyContext();
}
void
diff --git a/src/lib/nfs/Connection.hxx b/src/lib/nfs/Connection.hxx
index ff3b3658d..791ab15e7 100644
--- a/src/lib/nfs/Connection.hxx
+++ b/src/lib/nfs/Connection.hxx
@@ -119,6 +119,9 @@ public:
}
#endif
+ /**
+ * Must be run from EventLoop's thread.
+ */
~NfsConnection();
gcc_pure
diff --git a/src/lib/nfs/Glue.cxx b/src/lib/nfs/Glue.cxx
index c89d463ca..6fc849609 100644
--- a/src/lib/nfs/Glue.cxx
+++ b/src/lib/nfs/Glue.cxx
@@ -21,6 +21,7 @@
#include "Glue.hxx"
#include "Manager.hxx"
#include "IOThread.hxx"
+#include "event/Call.hxx"
#include "util/Manual.hxx"
static Manual<NfsManager> nfs_glue;
@@ -43,7 +44,7 @@ nfs_finish()
if (--in_use > 0)
return;
- nfs_glue.Destruct();
+ BlockingCall(io_thread_get(), [](){ nfs_glue.Destruct(); });
}
NfsConnection &