From: chunmei-liu Date: Fri, 17 Apr 2020 22:39:48 +0000 (-0700) Subject: crimson/net: bug fix for test_alien_echo.cc X-Git-Tag: v16.1.0~2466^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2b10acf2b28ae132d44217bdcfc5609087f1c222;p=ceph.git crimson/net: bug fix for test_alien_echo.cc readable_eventfd has pollable_fd member, which need engine() startup. so readable_eventfd can't be used outside seastar env. use seastar::file_desc instead of seastar::readable_eventfd and convert it to pollable_fd in seastar env. and normal eventfd is enough for begin_fd. Signed-off-by: chunmei-liu --- diff --git a/src/test/crimson/test_alien_echo.cc b/src/test/crimson/test_alien_echo.cc index 1e0f42978bf..319f68ea936 100644 --- a/src/test/crimson/test_alien_echo.cc +++ b/src/test/crimson/test_alien_echo.cc @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include @@ -93,17 +95,19 @@ struct Client { } // namespace seastar_pingpong class SeastarContext { - seastar::file_desc begin_fd; - seastar::readable_eventfd on_end; + int begin_fd; + seastar::file_desc on_end; public: SeastarContext() - : begin_fd{seastar::file_desc::eventfd(0, 0)} + : begin_fd{eventfd(0, 0)}, + on_end{seastar::file_desc::eventfd(0, 0)} {} template std::thread with_seastar(Func&& func) { - return std::thread{[this, func = std::forward(func)] { + return std::thread{[this, on_end = on_end.get(), + func = std::forward(func)] { // alien: are you ready? wait_for_seastar(); // alien: could you help me apply(func)? @@ -111,7 +115,7 @@ public: // alien: i've sent my request. have you replied it? // wait_for_seastar(); // alien: you are free to go! - on_end.write_side().signal(1); + ::eventfd_write(on_end, 1); }}; } @@ -119,9 +123,16 @@ public: app.run(argc, argv, [this] { return seastar::now().then([this] { return set_seastar_ready(); - }).then([this] { + }).then([on_end = std::move(on_end)] () mutable { // seastar: let me know once i am free to leave. - return on_end.wait().then([](size_t){}); + return seastar::do_with(seastar::pollable_fd(std::move(on_end)), [] + (seastar::pollable_fd& on_end_fds) { + return on_end_fds.readable().then([&on_end_fds] { + eventfd_t result = 0; + on_end_fds.get_file_desc().read(&result, sizeof(result)); + return seastar::make_ready_future<>(); + }); + }); }).handle_exception([](auto ep) { std::cerr << "Error: " << ep << std::endl; }).finally([] { @@ -132,14 +143,14 @@ public: seastar::future<> set_seastar_ready() { // seastar: i am ready to serve! - ::eventfd_write(begin_fd.get(), 1); + ::eventfd_write(begin_fd, 1); return seastar::now(); } private: void wait_for_seastar() { eventfd_t result = 0; - if (int r = ::eventfd_read(begin_fd.get(), &result); r < 0) { + if (int r = ::eventfd_read(begin_fd, &result); r < 0) { std::cerr << "unable to eventfd_read():" << errno << std::endl; } }