aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
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 &