diff --git a/daemon/src/audio/audiortp/audio_rtp_factory.cpp b/daemon/src/audio/audiortp/audio_rtp_factory.cpp index 2170b06e52a77e238fa1c4241ec4cc4bac363218..4747834738279838373248fd141c762bbfbafd5b 100644 --- a/daemon/src/audio/audiortp/audio_rtp_factory.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_factory.cpp @@ -51,8 +51,6 @@ AudioRtpFactory::AudioRtpFactory(SIPCall *ca) : rtpSession_(NULL), AudioRtpFactory::~AudioRtpFactory() { delete rtpSession_; - delete cachedLocalContext_; - delete cachedRemoteContext_; } void AudioRtpFactory::initConfig() diff --git a/daemon/src/audio/audiortp/audio_srtp_session.cpp b/daemon/src/audio/audiortp/audio_srtp_session.cpp index 38567d1b629cdbe7dbc29971401039429b9b3cc3..b6c3d94df80815603025b6536d16e7f355f6d610 100644 --- a/daemon/src/audio/audiortp/audio_srtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_srtp_session.cpp @@ -262,7 +262,7 @@ void AudioSrtpSession::initializeRemoteCryptoContext() { DEBUG("AudioSrtp: Initialize remote crypto context"); - CryptoSuiteDefinition crypto = sfl::CryptoSuites[remoteCryptoSuite_]; + const CryptoSuiteDefinition &crypto = sfl::CryptoSuites[remoteCryptoSuite_]; delete remoteCryptoCtx_; remoteCryptoCtx_ = new ost::CryptoContext(0x0, @@ -285,7 +285,7 @@ void AudioSrtpSession::initializeLocalCryptoContext() { DEBUG("AudioSrtp: Initialize local crypto context"); - CryptoSuiteDefinition crypto = sfl::CryptoSuites[localCryptoSuite_]; + const CryptoSuiteDefinition &crypto = sfl::CryptoSuites[localCryptoSuite_]; delete localCryptoCtx_; localCryptoCtx_ = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(), @@ -306,10 +306,14 @@ void AudioSrtpSession::initializeLocalCryptoContext() void AudioSrtpSession::restoreCryptoContext(ost::CryptoContext *localContext, ost::CryptoContext *remoteContext) { - delete remoteCryptoCtx_; - remoteCryptoCtx_ = remoteContext; - delete localCryptoCtx_; - localCryptoCtx_ = localContext; + if (remoteCryptoCtx_ != remoteContext) { + delete remoteCryptoCtx_; + remoteCryptoCtx_ = remoteContext; + } + if (localCryptoCtx_ != localContext) { + delete localCryptoCtx_; + localCryptoCtx_ = localContext; + } setInQueueCryptoContext(remoteCryptoCtx_); setOutQueueCryptoContext(localCryptoCtx_); }