kit/ForKit.cpp | 2 +- kit/Kit.cpp | 4 ++-- net/DelaySocket.cpp | 4 ++-- net/ServerSocket.hpp | 4 ++-- net/Socket.cpp | 6 +++--- net/Socket.hpp | 18 +++++++++--------- net/SslSocket.hpp | 6 +++--- net/WebSocketHandler.hpp | 2 +- tools/WebSocketDump.cpp | 6 +++--- wsd/Admin.cpp | 38 +++++++++++++++++++++++++------------- wsd/Admin.hpp | 9 ++++----- wsd/DocumentBroker.cpp | 4 ++-- wsd/LOOLWSD.cpp | 10 +++++----- 13 files changed, 62 insertions(+), 51 deletions(-)
New commits: commit 28a9c4dc05646f32883387bd071ac79e853044d5 Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Fri Apr 10 12:34:15 2020 +0100 Commit: Michael Meeks <michael.me...@collabora.com> CommitDate: Fri Apr 10 13:58:00 2020 +0200 Poll - cleanup method naming, and fix merge issues. This mends several problems from commit 5710c8632383e92372e1d81b6e26acc975e25ec4. Change-Id: I1b29f29ca81679608a2692488fa1ef22b2e62dfd Reviewed-on: https://gerrit.libreoffice.org/c/online/+/92032 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/kit/ForKit.cpp b/kit/ForKit.cpp index 5506fa339..1c763f8a3 100644 --- a/kit/ForKit.cpp +++ b/kit/ForKit.cpp @@ -606,7 +606,7 @@ int main(int argc, char** argv) { UnitKit::get().invokeForKitTest(); - mainPoll.ppoll(POLL_TIMEOUT_MICRO_S); + mainPoll.poll(POLL_TIMEOUT_MICRO_S); #if ENABLE_DEBUG if (!SingleKit) diff --git a/kit/Kit.cpp b/kit/Kit.cpp index acec37bb9..bb7933c93 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -2261,7 +2261,7 @@ public: if (timeoutMicroS < 0) { // Flush at most 1 + maxExtraEvents, or return when nothing left. - while (ppoll(0) > 0 && maxExtraEvents-- > 0) + while (poll(0) > 0 && maxExtraEvents-- > 0) ++eventsSignalled; } else @@ -2270,7 +2270,7 @@ public: _pollEnd = std::chrono::steady_clock::now() + std::chrono::microseconds(timeoutMicroS); do { - if (ppoll(timeoutMicroS) <= 0) + if (poll(timeoutMicroS) <= 0) break; const auto now = std::chrono::steady_clock::now(); diff --git a/net/DelaySocket.cpp b/net/DelaySocket.cpp index b07b46cc4..fe9478bca 100644 --- a/net/DelaySocket.cpp +++ b/net/DelaySocket.cpp @@ -77,8 +77,8 @@ public: // FIXME - really need to propagate 'noDelay' etc. // have a debug only lookup of delayed sockets for this case ? - int pgetPollEvents(std::chrono::steady_clock::time_point now, - int64_t &timeoutMaxMicroS) override + int getPollEvents(std::chrono::steady_clock::time_point now, + int64_t &timeoutMaxMicroS) override { if (_chunks.size() > 0) { diff --git a/net/ServerSocket.hpp b/net/ServerSocket.hpp index 65f826913..5316d3318 100644 --- a/net/ServerSocket.hpp +++ b/net/ServerSocket.hpp @@ -65,8 +65,8 @@ public: /// Returns a valid Socket shared_ptr on success only. virtual std::shared_ptr<Socket> accept(); - int pgetPollEvents(std::chrono::steady_clock::time_point /* now */, - int64_t & /* timeoutMaxMicroS */) override + int getPollEvents(std::chrono::steady_clock::time_point /* now */, + int64_t & /* timeoutMaxMicroS */) override { return POLLIN; } diff --git a/net/Socket.cpp b/net/Socket.cpp index 47ae1ad41..372f9ea1a 100644 --- a/net/Socket.cpp +++ b/net/Socket.cpp @@ -194,7 +194,7 @@ void SocketPoll::pollingThreadEntry() LOG_INF("Finished polling thread [" << _name << "]."); } -int SocketPoll::ppoll(int64_t timeoutMaxMicroS) +int SocketPoll::poll(int64_t timeoutMaxMicroS) { if (_runOnClientThread) checkAndReThread(); @@ -205,7 +205,7 @@ int SocketPoll::ppoll(int64_t timeoutMaxMicroS) std::chrono::steady_clock::now(); // The events to poll on change each spin of the loop. - psetupPollFds(now, timeoutMaxMicroS); + setupPollFds(now, timeoutMaxMicroS); const size_t size = _pollSockets.size(); int rc; @@ -529,7 +529,7 @@ void WebSocketHandler::dumpState(std::ostream& os) void StreamSocket::dumpState(std::ostream& os) { int64_t timeoutMaxMicroS = SocketPoll::DefaultPollTimeoutMicroS; - int events = pgetPollEvents(std::chrono::steady_clock::now(), timeoutMaxMicroS); + int events = getPollEvents(std::chrono::steady_clock::now(), timeoutMaxMicroS); os << "\t" << getFD() << "\t" << events << "\t" << _inBuffer.size() << "\t" << _outBuffer.size() << "\t" << " r: " << _bytesRecvd << "\t w: " << _bytesSent << "\t" diff --git a/net/Socket.hpp b/net/Socket.hpp index 852012424..199ea0a09 100644 --- a/net/Socket.hpp +++ b/net/Socket.hpp @@ -154,7 +154,7 @@ public: /// Prepare our poll record; adjust @timeoutMaxMs downwards /// for timeouts, based on current time @now. /// @returns POLLIN and POLLOUT if output is expected. - virtual int pgetPollEvents(std::chrono::steady_clock::time_point now, + virtual int getPollEvents(std::chrono::steady_clock::time_point now, int64_t &timeoutMaxMicroS) = 0; /// Handle results of events returned from poll @@ -370,8 +370,8 @@ public: /// Prepare our poll record; adjust @timeoutMaxMs downwards /// for timeouts, based on current time @now. /// @returns POLLIN and POLLOUT if output is expected. - virtual int pgetPollEvents(std::chrono::steady_clock::time_point now, - int64_t &timeoutMaxMicroS) = 0; + virtual int getPollEvents(std::chrono::steady_clock::time_point now, + int64_t &timeoutMaxMicroS) = 0; /// Do we need to handle a timeout ? virtual void checkTimeout(std::chrono::steady_clock::time_point /* now */) {} @@ -533,7 +533,7 @@ public: { while (continuePolling()) { - ppoll(DefaultPollTimeoutMicroS); + poll(DefaultPollTimeoutMicroS); } } @@ -576,7 +576,7 @@ public: /// Poll the sockets for available data to read or buffer to write. /// Returns the return-value of poll(2): 0 on timeout, /// -1 for error, and otherwise the number of events signalled. - int ppoll(int64_t timeoutMaxMicroS); + int poll(int64_t timeoutMaxMicroS); /// Write to a wakeup descriptor static void wakeup (int fd) @@ -695,7 +695,7 @@ private: const std::string &pathAndQuery); /// Initialize the poll fds array with the right events - void psetupPollFds(std::chrono::steady_clock::time_point now, + void setupPollFds(std::chrono::steady_clock::time_point now, int64_t &timeoutMaxMicroS) { const size_t size = _pollSockets.size(); @@ -704,7 +704,7 @@ private: for (size_t i = 0; i < size; ++i) { - int events = _pollSockets[i]->pgetPollEvents(now, timeoutMaxMicroS); + int events = _pollSockets[i]->getPollEvents(now, timeoutMaxMicroS); assert(events >= 0); // Or > 0 even? _pollFds[i].fd = _pollSockets[i]->getFD(); _pollFds[i].events = events; @@ -804,12 +804,12 @@ public: Socket::shutdown(); } - int pgetPollEvents(std::chrono::steady_clock::time_point now, + int getPollEvents(std::chrono::steady_clock::time_point now, int64_t &timeoutMaxMicroS) override { // cf. SslSocket::getPollEvents assertCorrectThread(); - int events = _socketHandler->pgetPollEvents(now, timeoutMaxMicroS); + int events = _socketHandler->getPollEvents(now, timeoutMaxMicroS); if (!_outBuffer.empty() || _shutdownSignalled) events |= POLLOUT; return events; diff --git a/net/SslSocket.hpp b/net/SslSocket.hpp index e6b7f908f..e7853c33f 100644 --- a/net/SslSocket.hpp +++ b/net/SslSocket.hpp @@ -126,11 +126,11 @@ public: return handleSslState(SSL_write(_ssl, buf, len)); } - int pgetPollEvents(std::chrono::steady_clock::time_point now, - int64_t & timeoutMaxMicroS) override + int getPollEvents(std::chrono::steady_clock::time_point now, + int64_t & timeoutMaxMicroS) override { assertCorrectThread(); - int events = getSocketHandler()->pgetPollEvents(now, timeoutMaxMicroS); + int events = getSocketHandler()->getPollEvents(now, timeoutMaxMicroS); if (_sslWantsTo == SslWantsTo::Read) { diff --git a/net/WebSocketHandler.hpp b/net/WebSocketHandler.hpp index 24c3a839a..83a3fa244 100644 --- a/net/WebSocketHandler.hpp +++ b/net/WebSocketHandler.hpp @@ -430,7 +430,7 @@ public: } } - int pgetPollEvents(std::chrono::steady_clock::time_point now, + int getPollEvents(std::chrono::steady_clock::time_point now, int64_t & timeoutMaxMicroS) override { if (!_isClient) diff --git a/tools/WebSocketDump.cpp b/tools/WebSocketDump.cpp index 822a256e8..81e034a67 100644 --- a/tools/WebSocketDump.cpp +++ b/tools/WebSocketDump.cpp @@ -175,8 +175,8 @@ private: in.erase(in.begin(), itBody); } - int pgetPollEvents(std::chrono::steady_clock::time_point /* now */, - int64_t & /* timeoutMaxMicroS */) override + int getPollEvents(std::chrono::steady_clock::time_point /* now */, + int64_t & /* timeoutMaxMicroS */) override { return POLLIN; } @@ -290,7 +290,7 @@ int main (int argc, char **argv) while (true) { - DumpSocketPoll.ppoll(100 * 1000 * 1000); + DumpSocketPoll.poll(100 * 1000 * 1000); } } diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp index ea905827c..b439a9ee8 100644 --- a/wsd/Admin.cpp +++ b/wsd/Admin.cpp @@ -24,7 +24,6 @@ #include <Common.hpp> #include "FileServer.hpp" #include <IoUtil.hpp> -#include "LOOLWSD.hpp" #include <Log.hpp> #include <Protocol.hpp> #include "Storage.hpp" @@ -158,11 +157,24 @@ void AdminSocketHandler::handleMessage(const std::vector<char> &payload) { const int pid = std::stoi(tokens[1]); LOG_INF("Admin request to kill PID: " << pid); - SigUtil::killChild(pid); + + std::set<pid_t> pids = model.getDocumentPids(); + if (pids.find(pid) != pids.end()) + { + SigUtil::killChild(pid); + } + else + { + LOG_WRN("Invalid PID to kill (not a document pid)"); + } } catch (std::invalid_argument& exc) { - LOG_WRN("Invalid PID to kill: " << tokens[1]); + LOG_WRN("Invalid PID to kill (invalid argument): " << tokens[1]); + } + catch (std::out_of_range& exc) + { + LOG_WRN("Invalid PID to kill (out of range): " << tokens[1]); } } else if (tokens.equals(0, "settings")) @@ -283,7 +295,11 @@ AdminSocketHandler::AdminSocketHandler(Admin* adminManager) void AdminSocketHandler::sendTextFrame(const std::string& message) { - UnitWSD::get().onAdminQueryMessage(message); + if (!Util::isFuzzing()) + { + UnitWSD::get().onAdminQueryMessage(message); + } + if (_isAuthenticated) { LOG_TRC("send admin text frame '" << message << "'"); @@ -344,7 +360,6 @@ Admin::Admin() : SocketPoll("admin"), _model(AdminModel()), _forKitPid(-1), - _forKitWritePipe(-1), _lastTotalMemory(0), _lastJiffies(0), _lastSentCount(0), @@ -455,7 +470,7 @@ void Admin::pollingThread() // Handle websockets & other work. const int timeout = capAndRoundInterval(std::min(std::min(cpuWait, memWait), netWait)); LOG_TRC("Admin poll for " << timeout << "ms."); - ppoll(timeout * 1000); // continue with ms for admin, settings etc. + poll(timeout * 1000); // continue with ms for admin, settings etc. } } @@ -591,10 +606,7 @@ void Admin::notifyForkit() << "setconfig limit_file_size_mb " << _defDocProcSettings.getLimitFileSizeMb() << '\n' << "setconfig limit_num_open_files " << _defDocProcSettings.getLimitNumberOpenFiles() << '\n'; - if (_forKitWritePipe != -1) - IoUtil::writeToPipe(_forKitWritePipe, oss.str()); - else - LOG_INF("Forkit write pipe not set (yet)."); + LOOLWSD::sendMessageToForKit(oss.str()); } void Admin::triggerMemoryCleanup(const size_t totalMem) @@ -663,8 +675,8 @@ public: _uri(uri) { } - int pgetPollEvents(std::chrono::steady_clock::time_point now, - int64_t &timeoutMaxMicroS) override + int getPollEvents(std::chrono::steady_clock::time_point now, + int64_t &timeoutMaxMicroS) override { if (_connecting) { @@ -672,7 +684,7 @@ public: return POLLOUT; } else - return AdminSocketHandler::pgetPollEvents(now, timeoutMaxMicroS); + return AdminSocketHandler::getPollEvents(now, timeoutMaxMicroS); } void performWrites() override diff --git a/wsd/Admin.hpp b/wsd/Admin.hpp index a418040c6..6287d38bc 100644 --- a/wsd/Admin.hpp +++ b/wsd/Admin.hpp @@ -16,6 +16,7 @@ #include "Log.hpp" #include "net/WebSocketHandler.hpp" +#include "LOOLWSD.hpp" class Admin; @@ -38,13 +39,13 @@ public: static void subscribeAsync(const std::shared_ptr<AdminSocketHandler>& handler); + /// Process incoming websocket messages + void handleMessage(const std::vector<char> &data) override; + private: /// Sends text frames simply to authenticated clients. void sendTextFrame(const std::string& message); - /// Process incoming websocket messages - void handleMessage(const std::vector<char> &data) override; - private: Admin* _admin; int _sessionId; @@ -91,7 +92,6 @@ public: void rmDoc(const std::string& docKey); void setForKitPid(const int forKitPid) { _forKitPid = forKitPid; _model.setForKitPid(forKitPid);} - void setForKitWritePipe(const int forKitWritePipe) { _forKitWritePipe = forKitWritePipe; } /// Callers must ensure that modelMutex is acquired AdminModel& getModel(); @@ -157,7 +157,6 @@ private: /// the Admin Poll thread. AdminModel _model; int _forKitPid; - int _forKitWritePipe; size_t _lastTotalMemory; size_t _lastJiffies; uint64_t _lastSentCount; diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 1d63e813f..bbe3b7937 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -298,7 +298,7 @@ void DocumentBroker::pollThread() // Main polling loop goodness. while (!_stop && _poll->continuePolling() && !SigUtil::getTerminationFlag()) { - _poll->ppoll(SocketPoll::DefaultPollTimeoutMicroS); + _poll->poll(SocketPoll::DefaultPollTimeoutMicroS); const auto now = std::chrono::steady_clock::now(); @@ -455,7 +455,7 @@ void DocumentBroker::pollThread() if (elapsedMicroS > flushTimeoutMicroS) break; - _poll->ppoll(std::min(flushTimeoutMicroS - elapsedMicroS, (int64_t)POLL_TIMEOUT_MICRO_S / 5)); + _poll->poll(std::min(flushTimeoutMicroS - elapsedMicroS, (int64_t)POLL_TIMEOUT_MICRO_S / 5)); } LOG_INF("Finished flushing socket for doc [" << _docKey << "]. stop: " << _stop << ", continuePolling: " << diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 1d014927a..92aae506a 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -2061,8 +2061,8 @@ private: " has no DocumentBroker to handle message: [" << abbr << "]."); } - int pgetPollEvents(std::chrono::steady_clock::time_point /* now */, - int64_t & /* timeoutMaxMs */) override + int getPollEvents(std::chrono::steady_clock::time_point /* now */, + int64_t & /* timeoutMaxMs */) override { return POLLIN; } @@ -2393,8 +2393,8 @@ private: #endif } - int pgetPollEvents(std::chrono::steady_clock::time_point /* now */, - int64_t & /* timeoutMaxMs */) override + int getPollEvents(std::chrono::steady_clock::time_point /* now */, + int64_t & /* timeoutMaxMs */) override { return POLLIN; } @@ -3580,7 +3580,7 @@ int LOOLWSD::innerMain() const int waitMicroS = UnitWSD::isUnitTesting() ? UnitWSD::get().getTimeoutMilliSeconds() * 1000 / 4 : SocketPoll::DefaultPollTimeoutMicroS * 4; - mainWait.ppoll(waitMicroS); + mainWait.poll(waitMicroS); // Wake the prisoner poll to spawn some children, if necessary. PrisonerPoll.wakeup(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits