aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/event/SocketMonitor.cxx6
-rw-r--r--src/event/SocketMonitor.hxx8
2 files changed, 14 insertions, 0 deletions
diff --git a/src/event/SocketMonitor.cxx b/src/event/SocketMonitor.cxx
index bf9fcdc59..6efa69647 100644
--- a/src/event/SocketMonitor.cxx
+++ b/src/event/SocketMonitor.cxx
@@ -159,3 +159,9 @@ SocketMonitor::Write(const void *data, size_t length)
return send(Get(), (const char *)data, length, flags);
}
+
+void
+SocketMonitor::CommitEventFlags()
+{
+ loop.WakeUp();
+}
diff --git a/src/event/SocketMonitor.hxx b/src/event/SocketMonitor.hxx
index c815e4f53..c60b8efdf 100644
--- a/src/event/SocketMonitor.hxx
+++ b/src/event/SocketMonitor.hxx
@@ -89,26 +89,32 @@ public:
void Schedule(unsigned flags) {
poll.events = flags;
poll.revents &= flags;
+ CommitEventFlags();
}
void Cancel() {
poll.events = 0;
+ CommitEventFlags();
}
void ScheduleRead() {
poll.events |= READ|HANGUP|ERROR;
+ CommitEventFlags();
}
void ScheduleWrite() {
poll.events |= WRITE;
+ CommitEventFlags();
}
void CancelRead() {
poll.events &= ~(READ|HANGUP|ERROR);
+ CommitEventFlags();
}
void CancelWrite() {
poll.events &= ~WRITE;
+ CommitEventFlags();
}
ssize_t Read(void *data, size_t length);
@@ -128,6 +134,8 @@ public:
gpointer user_data);
private:
+ void CommitEventFlags();
+
bool Check() const {
return (poll.revents & poll.events) != 0;
}