loolwsd/TraceFile.hpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-)
New commits: commit 86b36b8d6d3aa2a50f20139904cbd68828891708 Author: Michael Meeks <michael.me...@collabora.com> Date: Wed Sep 28 10:39:20 2016 +0100 Don't flush and write to the deflater from different threads concurrently. diff --git a/loolwsd/TraceFile.hpp b/loolwsd/TraceFile.hpp index 80c6bd7..3790a84 100644 --- a/loolwsd/TraceFile.hpp +++ b/loolwsd/TraceFile.hpp @@ -67,42 +67,53 @@ public: ~TraceFileWriter() { + std::unique_lock<std::mutex> lock(_mutex); + _deflater.close(); _stream.close(); } void writeEvent(const std::string& pId, const std::string& sessionId, const std::string& data) { - write(pId, sessionId, data, static_cast<char>(TraceFileRecord::Direction::Event)); - flush(); + std::unique_lock<std::mutex> lock(_mutex); + + writeLocked(pId, sessionId, data, static_cast<char>(TraceFileRecord::Direction::Event)); + flushLocked(); } void writeIncoming(const std::string& pId, const std::string& sessionId, const std::string& data) { + std::unique_lock<std::mutex> lock(_mutex); + if (_filter.match(data)) { - write(pId, sessionId, data, static_cast<char>(TraceFileRecord::Direction::Incoming)); + writeLocked(pId, sessionId, data, static_cast<char>(TraceFileRecord::Direction::Incoming)); } } void writeOutgoing(const std::string& pId, const std::string& sessionId, const std::string& data) { + std::unique_lock<std::mutex> lock(_mutex); + if (_recordOutgoing && _filter.match(data)) { - write(pId, sessionId, data, static_cast<char>(TraceFileRecord::Direction::Outgoing)); + writeLocked(pId, sessionId, data, static_cast<char>(TraceFileRecord::Direction::Outgoing)); } } - void flush() +private: + void flushLocked() { + Util::assertIsLocked(_mutex); + _deflater.flush(); _stream.flush(); } -private: - void write(const std::string& pId, const std::string& sessionId, const std::string& data, const char delim) + void writeLocked(const std::string& pId, const std::string& sessionId, const std::string& data, const char delim) { - std::unique_lock<std::mutex> lock(_mutex); + Util::assertIsLocked(_mutex); + const Poco::Int64 usec = Poco::Timestamp().epochMicroseconds() - _epochStart; if (_compress) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits