From 4ad7456428913f5232768367f2c0694bcb4540bb Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 30 Jan 2013 10:53:32 +0100 Subject: event/SocketMonitor: OnSocketReady() returns bool --- src/InotifySource.cxx | 4 +++- src/InotifySource.hxx | 2 +- src/ServerSocket.cxx | 5 +++-- src/event/BufferedSocket.cxx | 10 ++++++---- src/event/BufferedSocket.hxx | 2 +- src/event/SocketMonitor.hxx | 5 ++++- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/InotifySource.cxx b/src/InotifySource.cxx index 5da32c9bd..5552ed578 100644 --- a/src/InotifySource.cxx +++ b/src/InotifySource.cxx @@ -41,7 +41,7 @@ mpd_inotify_quark(void) return g_quark_from_static_string("inotify"); } -void +bool InotifySource::OnSocketReady(gcc_unused unsigned flags) { void *dest; @@ -79,6 +79,8 @@ InotifySource::OnSocketReady(gcc_unused unsigned flags) callback(event->wd, event->mask, name, callback_ctx); fifo_buffer_consume(buffer, sizeof(*event) + event->len); } + + return true; } inline diff --git a/src/InotifySource.hxx b/src/InotifySource.hxx index 0f29ae754..d174cc863 100644 --- a/src/InotifySource.hxx +++ b/src/InotifySource.hxx @@ -68,7 +68,7 @@ public: void Remove(unsigned wd); private: - virtual void OnSocketReady(unsigned flags) override; + virtual bool OnSocketReady(unsigned flags) override; }; #endif diff --git a/src/ServerSocket.cxx b/src/ServerSocket.cxx index 7f14168a8..a1e2ee01e 100644 --- a/src/ServerSocket.cxx +++ b/src/ServerSocket.cxx @@ -101,7 +101,7 @@ struct OneServerSocket final : private SocketMonitor { void Accept(); private: - virtual void OnSocketReady(unsigned flags) override; + virtual bool OnSocketReady(unsigned flags) override; }; struct server_socket { @@ -205,10 +205,11 @@ OneServerSocket::Accept() parent.callback_ctx); } -void +bool OneServerSocket::OnSocketReady(gcc_unused unsigned flags) { Accept(); + return true; } inline bool diff --git a/src/event/BufferedSocket.cxx b/src/event/BufferedSocket.cxx index b95519e49..dec60b5f7 100644 --- a/src/event/BufferedSocket.cxx +++ b/src/event/BufferedSocket.cxx @@ -202,21 +202,21 @@ BufferedSocket::ConsumeInput(size_t nbytes) fifo_buffer_consume(input, nbytes); } -void +bool BufferedSocket::OnSocketReady(unsigned flags) { assert(IsDefined()); if (gcc_unlikely(flags & (ERROR|HANGUP))) { OnSocketClosed(); - return; + return false; } if (flags & READ) { assert(input == nullptr || !fifo_buffer_is_full(input)); if (!ReadToBuffer() || !ResumeInput()) - return; + return false; if (input == nullptr || !fifo_buffer_is_full(input)) ScheduleRead(); @@ -233,6 +233,8 @@ BufferedSocket::OnSocketReady(unsigned flags) assert(!output.IsEmpty()); if (!WriteFromBuffer()) - return; + return false; } + + return true; } diff --git a/src/event/BufferedSocket.hxx b/src/event/BufferedSocket.hxx index 6e55a5e19..23fd97d38 100644 --- a/src/event/BufferedSocket.hxx +++ b/src/event/BufferedSocket.hxx @@ -113,7 +113,7 @@ protected: virtual void OnSocketClosed() = 0; private: - virtual void OnSocketReady(unsigned flags) override; + virtual bool OnSocketReady(unsigned flags) override; }; #endif diff --git a/src/event/SocketMonitor.hxx b/src/event/SocketMonitor.hxx index b8ded1967..c815e4f53 100644 --- a/src/event/SocketMonitor.hxx +++ b/src/event/SocketMonitor.hxx @@ -115,7 +115,10 @@ public: ssize_t Write(const void *data, size_t length); protected: - virtual void OnSocketReady(unsigned flags) = 0; + /** + * @return false if the socket has been closed + */ + virtual bool OnSocketReady(unsigned flags) = 0; public: /* GSource callbacks */ -- cgit v1.2.3