Global destructor clean-ups and python test fixes
[invirt/third/libt4.git] / rpc / poll_mgr.cc
index 83289a8..ebd61e1 100644 (file)
@@ -59,9 +59,14 @@ poll_mgr::poll_mgr() : aio_(new SelectAIO()) {
     th_ = thread(&poll_mgr::wait_loop, this);
 }
 
-poll_mgr::~poll_mgr()
-{
+poll_mgr::~poll_mgr() {
+    shutdown();
+}
+
+void poll_mgr::shutdown() {
     lock ml(m_);
+    if (shutdown_)
+        return;
     for (auto p : callbacks_)
         aio_->unwatch_fd(p.first, CB_RDWR);
     pending_change_ = true;
@@ -71,9 +76,7 @@ poll_mgr::~poll_mgr()
     th_.join();
 }
 
-void
-poll_mgr::add_callback(int fd, poll_flag flag, aio_callback *ch)
-{
+void poll_mgr::add_callback(int fd, poll_flag flag, aio_callback *ch) {
     lock ml(m_);
     aio_->watch_fd(fd, flag);