summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2022-03-02 17:40:33 +0000
committerMichael Meeks <michael.meeks@collabora.com>2022-03-03 09:04:15 +0000
commitf612c6673d48d8bbb343eedba92da093217d4f80 (patch)
tree76f228473c6be368e148fd082a7972d8a9b580c3
parentfix copy annotations on shared-view doc causes uncaught exception (diff)
downloadonline-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.cpp5
-rw-r--r--wsd/Admin.hpp1
-rw-r--r--wsd/LOOLWSD.cpp3
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)