aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/nfs/Connection.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/nfs/Connection.cxx')
-rw-r--r--src/lib/nfs/Connection.cxx35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/lib/nfs/Connection.cxx b/src/lib/nfs/Connection.cxx
index cae9ff102..48db620be 100644
--- a/src/lib/nfs/Connection.cxx
+++ b/src/lib/nfs/Connection.cxx
@@ -404,20 +404,11 @@ NfsConnection::ScheduleSocket()
SocketMonitor::Schedule(libnfs_to_events(nfs_which_events(context)));
}
-bool
-NfsConnection::OnSocketReady(unsigned flags)
+inline int
+NfsConnection::Service(unsigned flags)
{
assert(GetEventLoop().IsInside());
- assert(deferred_close.empty());
-
- bool closed = false;
-
- const bool was_mounted = mount_finished;
- if (!mount_finished)
- /* until the mount is finished, the NFS client may use
- various sockets, therefore we unregister and
- re-register it each time */
- SocketMonitor::Steal();
+ assert(context != nullptr);
#ifndef NDEBUG
assert(!in_event);
@@ -435,6 +426,26 @@ NfsConnection::OnSocketReady(unsigned flags)
in_service = false;
#endif
+ return result;
+}
+
+bool
+NfsConnection::OnSocketReady(unsigned flags)
+{
+ assert(GetEventLoop().IsInside());
+ assert(deferred_close.empty());
+
+ bool closed = false;
+
+ const bool was_mounted = mount_finished;
+ if (!mount_finished)
+ /* until the mount is finished, the NFS client may use
+ various sockets, therefore we unregister and
+ re-register it each time */
+ SocketMonitor::Steal();
+
+ const int result = Service(flags);
+
while (!deferred_close.empty()) {
InternalClose(deferred_close.front());
deferred_close.pop_front();