Commit 64b23a5b authored by Jakob Otto's avatar Jakob Otto

Fix shutdown routine

parent 74dbde15
...@@ -61,6 +61,8 @@ public: ...@@ -61,6 +61,8 @@ public:
/// Returns the index of `mgr` in the pollset or `-1`. /// Returns the index of `mgr` in the pollset or `-1`.
ptrdiff_t index_of(const socket_manager_ptr& mgr); ptrdiff_t index_of(const socket_manager_ptr& mgr);
bool is_same_thread();
// -- thread-safe signaling -------------------------------------------------- // -- thread-safe signaling --------------------------------------------------
/// Registers `mgr` for read events. /// Registers `mgr` for read events.
......
...@@ -104,6 +104,10 @@ ptrdiff_t multiplexer::index_of(const socket_manager_ptr& mgr) { ...@@ -104,6 +104,10 @@ ptrdiff_t multiplexer::index_of(const socket_manager_ptr& mgr) {
return i == last ? -1 : std::distance(first, i); return i == last ? -1 : std::distance(first, i);
} }
bool multiplexer::is_same_thread() {
return std::this_thread::get_id() == tid_;
}
void multiplexer::register_reading(const socket_manager_ptr& mgr) { void multiplexer::register_reading(const socket_manager_ptr& mgr) {
if (std::this_thread::get_id() == tid_) { if (std::this_thread::get_id() == tid_) {
if (mgr->mask() != operation::none) { if (mgr->mask() != operation::none) {
...@@ -242,7 +246,6 @@ void multiplexer::shutdown() { ...@@ -242,7 +246,6 @@ void multiplexer::shutdown() {
} }
} else { } else {
write_to_pipe(5, nullptr); write_to_pipe(5, nullptr);
run();
} }
} }
......
...@@ -55,7 +55,10 @@ void middleman::start() { ...@@ -55,7 +55,10 @@ void middleman::start() {
void middleman::stop() { void middleman::stop() {
for (const auto& backend : backends_) for (const auto& backend : backends_)
backend->stop(); backend->stop();
if (mpx_thread_.joinable()) mpx_->shutdown();
if (mpx_->is_same_thread())
mpx_->run();
else if (mpx_thread_.joinable())
mpx_thread_.join(); mpx_thread_.join();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment