From: Haomai Wang Date: Tue, 12 Jul 2016 04:30:50 +0000 (+0800) Subject: msg/async/Stack: register fork watcher X-Git-Tag: ses5-milestone5~107^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8d63e2c709d736bf9d5fda8d14109cf93d823f26;p=ceph.git msg/async/Stack: register fork watcher Signed-off-by: Haomai Wang --- diff --git a/src/msg/async/Stack.cc b/src/msg/async/Stack.cc index 52f17df0de60..8ca2270c982a 100644 --- a/src/msg/async/Stack.cc +++ b/src/msg/async/Stack.cc @@ -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() diff --git a/src/msg/async/Stack.h b/src/msg/async/Stack.h index 5b75aa699dc2..d6d7a33b0f0c 100644 --- a/src/msg/async/Stack.h +++ b/src/msg/async/Stack.h @@ -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 &&) = 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 &);