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