Skip to content

Commit

Permalink
net/tls: Extract session::close_after_shutdown()
Browse files Browse the repository at this point in the history
  • Loading branch information
p12tic committed Nov 24, 2024
1 parent d53aa8c commit cba633d
Showing 1 changed file with 20 additions and 15 deletions.
35 changes: 20 additions & 15 deletions src/net/tls.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1594,26 +1594,31 @@ class session : public enable_lw_shared_from_this<session> {
auto me = shared_from_this();
// running in background. try to bye-handshake us nicely, but after 10s we forcefully close.
engine().run_in_background(with_timeout(timer<>::clock::now() + std::chrono::seconds(10), shutdown()).finally([this] {
_eof = true;
try {
(void)_in.close().handle_exception([](std::exception_ptr) {}); // should wake any waiters
} catch (...) {
}
try {
(void)_out.close().handle_exception([](std::exception_ptr) {});
} catch (...) {
}
// make sure to wait for handshake attempt to leave semaphores. Must be in same order as
// handshake aqcuire, because in worst case, we get here while a reader is attempting
// re-handshake.
return with_semaphore(_in_sem, 1, [this] {
return with_semaphore(_out_sem, 1, [] {});
});
return close_after_shutdown();
}).then_wrapped([me = std::move(me)](future<> f) { // must keep object alive until here.
f.ignore_ready_future();
}));
}
}

future<> close_after_shutdown() {
_eof = true;
try {
(void)_in.close().handle_exception([](std::exception_ptr) {}); // should wake any waiters
} catch (...) {
}
try {
(void)_out.close().handle_exception([](std::exception_ptr) {});
} catch (...) {
}
// make sure to wait for handshake attempt to leave semaphores. Must be in same order as
// handshake aqcuire, because in worst case, we get here while a reader is attempting
// re-handshake.
return with_semaphore(_in_sem, 1, [this] {
return with_semaphore(_out_sem, 1, [] {});
});
}

// helper for sink
future<> flush() noexcept {
return with_semaphore(_out_sem, 1, [this] {
Expand Down

0 comments on commit cba633d

Please sign in to comment.