lib/nfs: migrate from DeferredMonitor to DeferEvent

This commit is contained in:
Max Kellermann
2017-11-10 21:01:01 +01:00
parent 4c1d29c86c
commit 1ccd2a7b11
5 changed files with 33 additions and 27 deletions

View File

@@ -196,7 +196,7 @@ NfsConnection::AddLease(NfsLease &lease)
new_leases.push_back(&lease);
DeferredMonitor::Schedule();
defer_new_lease.Schedule();
}
void
@@ -363,9 +363,9 @@ NfsConnection::DestroyContext()
mount_timeout_event.Cancel();
}
/* cancel pending DeferredMonitor that was scheduled to notify
/* cancel pending DeferEvent that was scheduled to notify
new leases */
DeferredMonitor::Cancel();
defer_new_lease.Cancel();
if (SocketMonitor::IsDefined())
SocketMonitor::Steal();
@@ -631,7 +631,7 @@ NfsConnection::OnMountTimeout()
}
void
NfsConnection::RunDeferred()
NfsConnection::RunDeferred() noexcept
{
assert(GetEventLoop().IsInside());

View File

@@ -23,7 +23,7 @@
#include "Cancellable.hxx"
#include "event/SocketMonitor.hxx"
#include "event/TimerEvent.hxx"
#include "event/DeferredMonitor.hxx"
#include "event/DeferEvent.hxx"
#include <string>
#include <list>
@@ -39,7 +39,7 @@ class NfsLease;
/**
* An asynchronous connection to a NFS server.
*/
class NfsConnection : SocketMonitor, DeferredMonitor {
class NfsConnection : SocketMonitor {
class CancellableCallback : public CancellablePointer<NfsCallback> {
NfsConnection &connection;
@@ -91,6 +91,7 @@ class NfsConnection : SocketMonitor, DeferredMonitor {
void Callback(int err, void *data);
};
DeferEvent defer_new_lease;
TimerEvent mount_timeout_event;
std::string server, export_name;
@@ -139,7 +140,7 @@ public:
NfsConnection(EventLoop &_loop,
const char *_server, const char *_export_name) noexcept
:SocketMonitor(_loop),
DeferredMonitor(_loop),
defer_new_lease(_loop, BIND_THIS_METHOD(RunDeferred)),
mount_timeout_event(_loop, BIND_THIS_METHOD(OnMountTimeout)),
server(_server), export_name(_export_name),
context(nullptr) {}
@@ -235,8 +236,8 @@ private:
/* callback for #mount_timeout_event */
void OnMountTimeout();
/* virtual methods from DeferredMonitor */
virtual void RunDeferred() override;
/* DeferEvent callback */
void RunDeferred() noexcept;
};
#endif

View File

@@ -33,7 +33,7 @@
#include <sys/stat.h>
NfsFileReader::NfsFileReader()
:DeferredMonitor(nfs_get_event_loop())
:defer_open(nfs_get_event_loop(), BIND_THIS_METHOD(OnDeferredOpen))
{
}
@@ -50,7 +50,7 @@ NfsFileReader::Close()
if (state == State::DEFER) {
state = State::INITIAL;
DeferredMonitor::Cancel();
defer_open.Cancel();
return;
}
@@ -122,7 +122,7 @@ NfsFileReader::Open(const char *uri)
}
state = State::DEFER;
DeferredMonitor::Schedule();
defer_open.Schedule();
}
void
@@ -272,7 +272,7 @@ NfsFileReader::OnNfsError(std::exception_ptr &&e)
}
void
NfsFileReader::RunDeferred()
NfsFileReader::OnDeferredOpen() noexcept
{
assert(state == State::DEFER);

View File

@@ -23,7 +23,7 @@
#include "check.h"
#include "Lease.hxx"
#include "Callback.hxx"
#include "event/DeferredMonitor.hxx"
#include "event/DeferEvent.hxx"
#include "Compiler.h"
#include <string>
@@ -43,7 +43,7 @@ class NfsConnection;
* To get started, derive your class from it and implement the pure
* virtual methods, construct an instance, and call Open().
*/
class NfsFileReader : NfsLease, NfsCallback, DeferredMonitor {
class NfsFileReader : NfsLease, NfsCallback {
enum class State {
INITIAL,
DEFER,
@@ -63,11 +63,15 @@ class NfsFileReader : NfsLease, NfsCallback, DeferredMonitor {
nfsfh *fh;
DeferEvent defer_open;
public:
NfsFileReader();
~NfsFileReader();
using DeferredMonitor::GetEventLoop;
EventLoop &GetEventLoop() noexcept {
return defer_open.GetEventLoop();
}
void Close();
void DeferClose();
@@ -146,8 +150,8 @@ private:
void OnNfsCallback(unsigned status, void *data) final;
void OnNfsError(std::exception_ptr &&e) final;
/* virtual methods from DeferredMonitor */
void RunDeferred() final;
/* DeferEvent callback */
void OnDeferredOpen() noexcept;
};
#endif