From d6599abf81035911af91238dfe6eab0626594353 Mon Sep 17 00:00:00 2001 From: dijunkun Date: Wed, 14 Aug 2024 16:37:54 +0800 Subject: [PATCH] [fix] fix DestroyPeer() method object delete --- src/interface/x.h | 2 +- src/pc/peer_connection.cpp | 15 +++++++++++++-- src/rtc/x_inner.cpp | 11 ++++++----- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/interface/x.h b/src/interface/x.h index 3d84798..e49757b 100644 --- a/src/interface/x.h +++ b/src/interface/x.h @@ -75,7 +75,7 @@ typedef struct { DLLAPI PeerPtr* CreatePeer(const Params* params); -DLLAPI void DestroyPeer(PeerPtr* peer_ptr); +DLLAPI void DestroyPeer(PeerPtr** peer_ptr); DLLAPI int Init(PeerPtr* peer_ptr, const char* user_id); diff --git a/src/pc/peer_connection.cpp b/src/pc/peer_connection.cpp index d410639..f823f41 100644 --- a/src/pc/peer_connection.cpp +++ b/src/pc/peer_connection.cpp @@ -25,6 +25,10 @@ PeerConnection::~PeerConnection() { video_codec_inited_ = false; audio_codec_inited_ = false; load_nvcodec_dll_success = false; + + user_data_ = nullptr; + + ice_transmission_list_.clear(); } int PeerConnection::Init(PeerConnectionParams params, @@ -218,9 +222,12 @@ int PeerConnection::CreateVideoCodec(bool hardware_acceleration) { hardware_acceleration_ = hardware_acceleration; if (av1_encoding_) { + if (hardware_acceleration_) { + hardware_acceleration_ = false; + LOG_WARN("Only support software codec for AV1"); + } video_encoder_ = VideoEncoderFactory::CreateVideoEncoder(false, true); video_decoder_ = VideoDecoderFactory::CreateVideoDecoder(false, true); - LOG_WARN("Only support software codec for AV1"); } else { #ifdef __APPLE__ if (hardware_acceleration_) { @@ -244,6 +251,9 @@ int PeerConnection::CreateVideoCodec(bool hardware_acceleration) { video_encoder_ = VideoEncoderFactory::CreateVideoEncoder(false, false); video_decoder_ = VideoDecoderFactory::CreateVideoDecoder(false, false); } + } else { + video_encoder_ = VideoEncoderFactory::CreateVideoEncoder(false, false); + video_decoder_ = VideoDecoderFactory::CreateVideoDecoder(false, false); } #endif } @@ -604,7 +614,8 @@ int PeerConnection::RequestTransmissionMemberList( int PeerConnection::Destroy() { if (ws_transport_) { - ws_transport_->Close(0, "destroy"); + LOG_INFO("Close websocket") + ws_transport_->Close(); } ice_transmission_list_.clear(); diff --git a/src/rtc/x_inner.cpp b/src/rtc/x_inner.cpp index 4c595bb..967b159 100644 --- a/src/rtc/x_inner.cpp +++ b/src/rtc/x_inner.cpp @@ -39,11 +39,12 @@ PeerPtr *CreatePeer(const Params *params) { return peer_ptr; } -void DestroyPeer(PeerPtr *peer_ptr) { - peer_ptr->peer_connection->Destroy(); - delete peer_ptr; - peer_ptr = nullptr; - LOG_INFO("Destroy peer"); +void DestroyPeer(PeerPtr **peer_ptr) { + (*peer_ptr)->peer_connection->Destroy(); + delete (*peer_ptr)->peer_connection; + (*peer_ptr)->peer_connection = nullptr; + delete *peer_ptr; + *peer_ptr = nullptr; } int Init(PeerPtr *peer_ptr, const char *user_id) {