From 23e850dc304fdb4efb2702b7a35130da03da7712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 27 Feb 2020 10:06:48 -0500 Subject: [PATCH] channeledtransport: fix segfault during callback destruction onDestroy/onRecv should not be called after destruction. Because ChanneledSIPTransport is managed by PJSIP, we can't pass a weak_ptr to the callbacks, so just replace the callbacks during the destruction. Change-Id: Ibc3f2baf8b4cdcfe45652fd14d1acc9d38a07af4 --- src/jamidht/channeled_transport.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/jamidht/channeled_transport.cpp b/src/jamidht/channeled_transport.cpp index c30543b6ab..8afc521fea 100644 --- a/src/jamidht/channeled_transport.cpp +++ b/src/jamidht/channeled_transport.cpp @@ -155,6 +155,10 @@ ChanneledSIPTransport::~ChanneledSIPTransport() auto base = getTransportBase(); + // Here, we reset callbacks in ChannelSocket to avoid to call it after destruction + // ChanneledSIPTransport is managed by pjsip, so we don't have any weak_ptr available + socket_->setOnRecv([](const uint8_t* buf, size_t len){return len;}); + socket_->onShutdown([](){}); // Stop low-level transport first socket_->shutdown(); socket_.reset(); -- GitLab