[Libreoffice-commits] online.git: common/Util.hpp kit/Kit.cpp
Ashod Nakashian (via logerrit)
logerrit at kemper.freedesktop.org
Mon Oct 14 20:36:22 UTC 2019
common/Util.hpp | 19 +++++++++++++++++++
kit/Kit.cpp | 12 ++++++++----
2 files changed, 27 insertions(+), 4 deletions(-)
New commits:
commit 77e7cae6899728f8a291998eedde7d68bd450504
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Mon May 27 22:57:53 2019 -0400
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon Oct 14 21:35:27 2019 +0100
wsd: fix password-protect file loading from multiple views
With password-protected files, the first loading attempt
always fails due to missing password. At that point the
client is notified of the missing password and the user
is prompted. The second attempt includes a (hopefully)
correct password and the document loading commences.
Due to the fact that an exception is raised when
the loading fails, this left the loading latch
triggered, which blocked subsequent attempts.
Change-Id: I7cc257a36eb1cc080f460aac8cdb7030783a5914
diff --git a/common/Util.hpp b/common/Util.hpp
index b8b350b2c..d345950ba 100644
--- a/common/Util.hpp
+++ b/common/Util.hpp
@@ -938,6 +938,25 @@ int main(int argc, char**argv)
//// Convert time from ISO8061 fraction format
std::chrono::system_clock::time_point iso8601ToTimestamp(const std::string& iso8601Time, const std::string& logName);
+ /// Automatically execute code at end of current scope.
+ /// Used for exception-safe code.
+ class ScopeGuard
+ {
+ public:
+ template <typename T>
+ explicit ScopeGuard(T const &func) : m_func(func) {}
+
+ ~ScopeGuard()
+ {
+ if (m_func)
+ m_func();
+ }
+ private:
+ ScopeGuard(const ScopeGuard &) = delete;
+ ScopeGuard &operator=(const ScopeGuard &) = delete;
+
+ std::function<void()> m_func;
+ };
} // end namespace Util
#endif
diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index b40577878..60fe9ed81 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -1488,6 +1488,13 @@ private:
// Flag and release lock.
++_isLoading;
+
+ Util::ScopeGuard g([this]() {
+ // Not loading.
+ --_isLoading;
+ _cvLoading.notify_one();
+ });
+
lock.unlock();
try
@@ -1495,16 +1502,13 @@ private:
if (!load(session, renderOpts, docTemplate))
return false;
}
- catch (const std::exception& exc)
+ catch (const std::exception &exc)
{
LOG_ERR("Exception while loading url [" << uriAnonym <<
"] for session [" << sessionId << "]: " << exc.what());
return false;
}
- --_isLoading;
- _cvLoading.notify_one();
-
return true;
}
More information about the Libreoffice-commits
mailing list