loolwsd/ChildSession.cpp | 2 - loolwsd/LOOLKit.cpp | 48 ++++++++++++++++++++++++++++------------------- 2 files changed, 30 insertions(+), 20 deletions(-)
New commits: commit df0339422353dc8a75641415e564c1e35d9503d9 Author: Pranav Kant <pran...@collabora.co.uk> Date: Sun Aug 21 22:35:03 2016 +0530 loolwsd: Don't try to unload if underlying doc pointer is null diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index 0b1d87f..2b9117c 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -880,7 +880,7 @@ private: std::unique_lock<std::mutex> lock(_mutex); const auto it = _connections.find(intSessionId); - if (it == _connections.end() || !it->second || !_loKitDocument) + if (it == _connections.end() || !it->second || !_loKitDocument || !_loKitDocument->get()) { // Nothing to do. Log::error("No [" + sessionId + "] session!"); commit 4fdfa3a1c941ec9bb41a30c73a431f2d81367b51 Author: Pranav Kant <pran...@collabora.co.uk> Date: Thu Aug 11 18:00:41 2016 +0530 loolwsd: Separate global and document callback diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index e4d33df..0b1d87f 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -753,6 +753,25 @@ public: private: + static void GlobalCallback(const int nType, const char* pPayload, void* pData) + { + const std::string payload = pPayload ? pPayload : "(nil)"; + Log::trace() << "Document::GlobalCallback " + << LOKitHelper::kitCallbackTypeToString(nType) + << " [" << payload << "]." << Log::end; + Document* self = reinterpret_cast<Document*>(pData); + if (nType == LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY || + nType == LOK_CALLBACK_DOCUMENT_PASSWORD) + { + // Mark the document password type. + self->setDocumentPassword(nType); + return; + } + + // Broadcast leftover status indicator callbacks to all clients + self->broadcastCallbackToClients(nType, payload); + } + static void ViewCallback(const int nType, const char* pPayload, void* pData) { CallbackDescriptor* pDescr = reinterpret_cast<CallbackDescriptor*>(pData); @@ -788,23 +807,15 @@ private: << LOKitHelper::kitCallbackTypeToString(nType) << " [" << payload << "]." << Log::end; Document* self = reinterpret_cast<Document*>(pData); - if (self == nullptr) - { - return; - } - - std::unique_lock<std::mutex> lock(self->_mutex); + self->broadcastCallbackToClients(nType, pPayload); + } - if (nType == LOK_CALLBACK_DOCUMENT_PASSWORD_TO_MODIFY || - nType == LOK_CALLBACK_DOCUMENT_PASSWORD) - { - // Mark the document password type. - self->setDocumentPassword(nType); - return; - } + /// Helper method to broadcast callback and its payload to all clients + void broadcastCallbackToClients(const int nType, const std::string& payload) + { + std::unique_lock<std::mutex> lock(_mutex); - // Broadcast to all clients. - for (auto& it: self->_connections) + for (auto& it: _connections) { if (it.second->isRunning()) { @@ -812,7 +823,7 @@ private: if (session) { auto pNotif = new CallbackNotification(session, nType, payload); - self->_callbackQueue.enqueueNotification(pNotif); + _callbackQueue.enqueueNotification(pNotif); } } } @@ -939,8 +950,7 @@ private: auto lock(_loKit->getLock()); if (LIBREOFFICEKIT_HAS(_loKit->get(), registerCallback)) { - //TODO: Use GlobalCallback for Password and statusindicator. - _loKit->get()->pClass->registerCallback(_loKit->get(), DocumentCallback, this); + _loKit->get()->pClass->registerCallback(_loKit->get(), GlobalCallback, this); const auto flags = LOK_FEATURE_DOCUMENT_PASSWORD | LOK_FEATURE_DOCUMENT_PASSWORD_TO_MODIFY; _loKit->setOptionalFeatures(flags); commit 86891498a97bd216e497a9bdf068b81491214e55 Author: Pranav Kant <pran...@collabora.co.uk> Date: Mon Aug 15 12:40:45 2016 +0530 loolwsd: fix leftover confusing comment Call to getStatus is gone in 2744caf97b4c1be26966d04e61518022f9f546a9, so there are no "arguments" anywhere now. diff --git a/loolwsd/ChildSession.cpp b/loolwsd/ChildSession.cpp index 9ac519a..ff4fed2 100644 --- a/loolwsd/ChildSession.cpp +++ b/loolwsd/ChildSession.cpp @@ -358,7 +358,7 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT _loKitDocument->setPart(part); } - // Respond by the document status, which has no arguments. + // Respond by the document status Log::debug("Sending status after loading view " + std::to_string(_viewId) + "."); const auto status = LOKitHelper::documentStatus(_loKitDocument->get()); if (status.empty() || !sendTextFrame("status: " + status)) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits