diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2022-03-02 17:40:33 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2022-03-03 09:04:15 +0000 |
commit | f612c6673d48d8bbb343eedba92da093217d4f80 (patch) | |
tree | 76f228473c6be368e148fd082a7972d8a9b580c3 | |
parent | fix copy annotations on shared-view doc causes uncaught exception (diff) | |
download | online-f612c6673d48d8bbb343eedba92da093217d4f80.tar.gz online-f612c6673d48d8bbb343eedba92da093217d4f80.zip |
Admin: shutdown cleanly to avoid races during close.
Suspect cause for SEGV in:
std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<DocumentBroker> >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<DocumentBroker> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::shared_ptr<DocumentBroker> > > >::find(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
COOLWSD::closeDocument(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
Admin::triggerMemoryCleanup(unsigned long)
Admin::pollingThread()
Change-Id: Id09e4db4b21cb7a11dddb867758aded4b28ff3ec
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
-rw-r--r-- | wsd/Admin.cpp | 5 | ||||
-rw-r--r-- | wsd/Admin.hpp | 1 | ||||
-rw-r--r-- | wsd/LOOLWSD.cpp | 3 |
3 files changed, 9 insertions, 0 deletions
diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp index 1a78bf25dc..ba75f81d7f 100644 --- a/wsd/Admin.cpp +++ b/wsd/Admin.cpp @@ -958,4 +958,9 @@ void Admin::start() startThread(); } +void Admin::stop() +{ + joinThread(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/wsd/Admin.hpp b/wsd/Admin.hpp index 01f531337b..dc8059fbf0 100644 --- a/wsd/Admin.hpp +++ b/wsd/Admin.hpp @@ -67,6 +67,7 @@ public: } void start(); + void stop(); /// Custom poll thread function void pollingThread() override; diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 6a4ceeaff4..0fdf94334d 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -3922,6 +3922,9 @@ public: { _acceptPoll.joinThread(); WebServerPoll.joinThread(); +#if !MOBILEAPP + Admin::instance().stop(); +#endif } void dumpState(std::ostream& os) |