]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async/Stack: register fork watcher
authorHaomai Wang <haomai@xsky.com>
Tue, 12 Jul 2016 04:30:50 +0000 (12:30 +0800)
committerHaomai Wang <haomai@xsky.com>
Tue, 16 Aug 2016 15:19:25 +0000 (23:19 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/Stack.cc
src/msg/async/Stack.h

index 52f17df0de603aad2e641732f0a9ddcb0dd4d27a..8ca2270c982a9f478df9f3b1c63700ecb3116f8e 100644 (file)
@@ -73,6 +73,7 @@ NetworkStack::NetworkStack(CephContext *c, const string &t): type(t), started(fa
     Worker *w = create_worker(cct, type, i);
     workers.push_back(w);
   }
+  cct->register_fork_watcher(this);
 }
 
 void NetworkStack::start()
index 5b75aa699dc28730d2d6a589fbb1921ff95af277..d6d7a33b0f0c5ad531e0673db3a1db90ee90d061 100644 (file)
@@ -272,7 +272,7 @@ class Worker {
   }
 };
 
-class NetworkStack {
+class NetworkStack : public CephContext::ForkWatcher {
   std::string type;
   unsigned num_workers = 0;
   Spinlock pool_spin;
@@ -322,6 +322,14 @@ class NetworkStack {
   virtual void spawn_worker(unsigned i, std::function<void ()> &&) = 0;
   virtual void join_worker(unsigned i) = 0;
 
+  virtual void handle_pre_fork() override {
+    stop();
+  }
+
+  virtual void handle_post_fork() override {
+    start();
+  }
+
  private:
   NetworkStack(const NetworkStack &);
   NetworkStack& operator=(const NetworkStack &);