From c2d083a0a904072f0ec5c067cdea45147301e5a2 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 2 Oct 2015 00:06:20 +0000 Subject: Unregister socket clients on hangup. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5735 a436a847-0d15-0410-975c-d299462d15a1 --- ingen/SocketReader.hpp | 5 ++++- src/SocketReader.cpp | 1 + src/server/SocketServer.hpp | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ingen/SocketReader.hpp b/ingen/SocketReader.hpp index 88d24994..4baf4696 100644 --- a/ingen/SocketReader.hpp +++ b/ingen/SocketReader.hpp @@ -36,7 +36,10 @@ public: Interface& iface, SPtr sock); - ~SocketReader(); + virtual ~SocketReader(); + +protected: + virtual void on_hangup() {} private: void run(); diff --git a/src/SocketReader.cpp b/src/SocketReader.cpp index d57cda29..c9b31cb5 100644 --- a/src/SocketReader.cpp +++ b/src/SocketReader.cpp @@ -154,6 +154,7 @@ SocketReader::run() // Wait for input to arrive at socket int ret = poll(&pfd, 1, -1); if (ret == -1 || (pfd.revents & (POLLERR|POLLHUP|POLLNVAL))) { + on_hangup(); break; // Hangup } else if (!ret) { continue; // No data, shouldn't happen diff --git a/src/server/SocketServer.hpp b/src/server/SocketServer.hpp index a1811334..fc9fdeae 100644 --- a/src/server/SocketServer.hpp +++ b/src/server/SocketServer.hpp @@ -47,7 +47,15 @@ public: } ~SocketServer() { + if (_writer) { + _engine.unregister_client(_writer); + } + } + +protected: + void on_hangup() { _engine.unregister_client(_writer); + _writer.reset(); } private: -- cgit v1.2.1