All random numbers generated via one PRNG seeded in one place.
[invirt/third/libt4.git] / rpc / poll_mgr.cc
index 83289a8..102b8dc 100644 (file)
@@ -2,6 +2,7 @@
 #include <errno.h>
 #include <sys/select.h>
 #include "file.h"
+#include "threaded_log.h"
 
 #ifdef __linux__
 #include <sys/epoll.h>
@@ -11,8 +12,6 @@ using std::vector;
 
 aio_callback::~aio_callback() {}
 
-poll_mgr poll_mgr::shared_mgr;
-
 class wait_manager {
     public:
         virtual void watch_fd(int fd, poll_flag flag) = 0;
@@ -59,9 +58,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 +75,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);