when shutting down monitors and valgrind is involved, we can,
sometimes, to hit race condition and locks that causing the shutdown
process to hang for a long time.
reset_recv_state - issuing a message without proper locks that
causing the shutdown to hang during shutdown connection (drain network)
Fixes: https://tracker.ceph.com/issues/63501
Signed-off-by: Nitzan Mordechai <nmordech@redhat.com>
(cherry picked from commit
b800149243b593ff7946d9a5df23f5a49247c0fd)
// `write_message()`. `submit_to()` here is NOT blocking.
if (!connection->center->in_thread()) {
connection->center->submit_to(connection->center->get_id(), [this] {
- ldout(cct, 5) << "reset_recv_state (warped) reseting security handlers"
- << dendl;
// Possibly unnecessary. See the comment in `deactivate_existing`.
std::lock_guard<std::mutex> l(connection->lock);
std::lock_guard<std::mutex> wl(connection->write_lock);
+ ldout(cct, 5) << "reset_recv_state (warped) reseting security handlers"
+ << dendl;
reset_security();
}, /* always_async = */true);
} else {
// `write_event()` unlocks it just before calling `write_message()`.
// `submit_to()` here is NOT blocking.
connection->center->submit_to(connection->center->get_id(), [this] {
- ldout(cct, 5) << "reset_recv_state (warped) reseting crypto and compression handlers"
- << dendl;
// Possibly unnecessary. See the comment in `deactivate_existing`.
std::lock_guard<std::mutex> l(connection->lock);
std::lock_guard<std::mutex> wl(connection->write_lock);
+ ldout(cct, 5) << "reset_recv_state (warped) reseting crypto and compression handlers"
+ << dendl;
reset_security();
reset_compression();
}, /* always_async = */true);