loolwsd/LOOLBroker.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
New commits: commit a882ed1aa14273d5c59f8e0dc0a551b6824648a4 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Thu Jan 21 09:57:10 2016 -0500 loolwsd: thread safety fixes in broker Change-Id: Ibfff184ad294c14d6583f7a8282edc4e2742ad52 Reviewed-on: https://gerrit.libreoffice.org/21685 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp index 65e2a16..62ae29e 100644 --- a/loolwsd/LOOLBroker.cpp +++ b/loolwsd/LOOLBroker.cpp @@ -72,7 +72,7 @@ static std::chrono::steady_clock::time_point lastMaintenanceTime = std::chrono:: static unsigned int childCounter = 0; static signed numPreSpawnedChildren = 0; -static std::mutex forkMutex; +static std::recursive_mutex forkMutex; static std::map<Process::PID, int> _childProcesses; static std::map<std::string, Process::PID> _cacheURL; @@ -82,7 +82,7 @@ namespace /// of a child. Returns -1 on error. int getChildPipe(const Process::PID pid) { - std::lock_guard<std::mutex> lock(forkMutex); + std::lock_guard<std::recursive_mutex> lock(forkMutex); const auto it = _childProcesses.find(pid); return (it != _childProcesses.end() ? it->second : -1); } @@ -91,7 +91,7 @@ namespace /// invalidates the URL cache. void removeChild(const Process::PID pid) { - std::lock_guard<std::mutex> lock(forkMutex); + std::lock_guard<std::recursive_mutex> lock(forkMutex); const auto it = _childProcesses.find(pid); if (it != _childProcesses.end()) { @@ -277,6 +277,8 @@ public: void verifyChilds() { + std::lock_guard<std::recursive_mutex> lock(forkMutex); + Log::trace("Verifying Childs."); std::string aMessage; bool bError = false; @@ -307,8 +309,9 @@ public: Process::PID searchURL(const std::string& aURL) { - const std::string aMessage = "search " + aURL + "\r\n"; + std::lock_guard<std::recursive_mutex> lock(forkMutex); + const std::string aMessage = "search " + aURL + "\r\n"; Process::PID nPID = -1; for (auto& it : _childProcesses) { @@ -356,6 +359,8 @@ public: void handleInput(const std::string& aMessage) { + std::lock_guard<std::recursive_mutex> lock(forkMutex); + StringTokenizer tokens(aMessage, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); if (tokens[0] == "request" && tokens.count() == 3) { @@ -842,7 +847,7 @@ int main(int argc, char** argv) { if (forkCounter > 0) { - std::lock_guard<std::mutex> lock(forkMutex); + std::lock_guard<std::recursive_mutex> lock(forkMutex); // Figure out how many children we need. const signed total = _childProcesses.size(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits