From f11e9b87a1273062b8d92fa6fff3ffbd9fc338cf Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Thu, 28 Mar 2019 23:07:35 +0800 Subject: [PATCH] crimson/net: fix messenger creation sharded data structures should only be allocated in core#0, or the program will hang during exit. Signed-off-by: Yingxin Cheng --- src/crimson/net/Fwd.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/crimson/net/Fwd.h b/src/crimson/net/Fwd.h index 8dbb3cabbc6..f47b61dc1c5 100644 --- a/src/crimson/net/Fwd.h +++ b/src/crimson/net/Fwd.h @@ -40,14 +40,19 @@ class Messenger; template seastar::future create_sharded(Args... args) { - auto sharded_obj = seastar::make_lw_shared>(); - return sharded_obj->start(args...).then([sharded_obj]() { - auto ret = &sharded_obj->local(); + // seems we should only construct/stop shards on #0 + return seastar::smp::submit_to(0, [=] { + auto sharded_obj = seastar::make_lw_shared>(); + return sharded_obj->start(args...).then([sharded_obj]() { seastar::engine().at_exit([sharded_obj]() { return sharded_obj->stop().finally([sharded_obj] {}); }); - return ret; + return sharded_obj.get(); }); + }).then([] (seastar::sharded *ptr_shard) { + // return the pointer valid for the caller CPU + return &ptr_shard->local(); + }); } } // namespace ceph::net -- 2.39.5