diff --git a/runtime-light/components/confdata/confdata-component.cpp b/runtime-light/components/confdata/confdata-component.cpp index ae3c1f08a0..6103197fd9 100644 --- a/runtime-light/components/confdata/confdata-component.cpp +++ b/runtime-light/components/confdata/confdata-component.cpp @@ -90,7 +90,7 @@ VISIBILITY_DEFAULT const ImageInfo* k2_describe() { .is_oneshot = 0, .build_timestamp = KPHP_CONFDATA_BUILD_TIMESTAMP, .header_h_version = K2_PLATFORM_HEADER_H_VERSION, - .version = "1.0.0", + .version = "1.0.1", .extra_info_size = extra_info.size(), .extra_info = extra_info.data()}; return std::addressof(image_info); diff --git a/runtime-light/components/confdata/state/instance-state.cpp b/runtime-light/components/confdata/state/instance-state.cpp index ffe39e907e..d43c7999e8 100644 --- a/runtime-light/components/confdata/state/instance-state.cpp +++ b/runtime-light/components/confdata/state/instance-state.cpp @@ -344,6 +344,8 @@ auto InstanceState::accept_loop() noexcept -> kphp::coro::task<> { } auto InstanceState::serve_reader_lease(kphp::component::stream reader_stream) noexcept -> kphp::coro::task<> { + // Outlive the connection, whose destructor unregisters the handler capturing this event. + kphp::coro::event reader_disconnected{}; auto connection{kphp::component::connection::from_stream(std::move(reader_stream))}; if (!connection) [[unlikely]] { co_return kphp::log::warning("failed to create a confdata reader connection: error -> {}", connection.error()); @@ -353,6 +355,10 @@ auto InstanceState::serve_reader_lease(kphp::component::stream reader_stream) no co_return kphp::log::warning("can't serve a confdata reader lease: can't find confdata piece"); } + if (const auto registered{connection->register_abort_handler([&reader_disconnected] noexcept { reader_disconnected.set(); })}; !registered) [[unlikely]] { + co_return kphp::log::warning("failed to watch a confdata reader connection: error -> {}", registered.error()); + } + reader_session session{*this, std::prev(m_confdata_pieces.end())}; kphp::log::debug("issuing reader lease: sample -> {}, sections -> {}", session.sample_id(), m_confdata_pieces.back().storage().values(session.sample_id()).size()); @@ -364,10 +370,6 @@ auto InstanceState::serve_reader_lease(kphp::component::stream reader_stream) no co_return kphp::log::warning("failed to write a confdata reader lease: error -> {}", written.error()); } - kphp::coro::event reader_disconnected{}; - if (const auto registered{connection->register_abort_handler([&reader_disconnected] noexcept { reader_disconnected.set(); })}; !registered) [[unlikely]] { - co_return kphp::log::warning("failed to watch a confdata reader connection: error -> {}", registered.error()); - } co_await reader_disconnected; }