diff --git a/src/call/local-conference-call.cpp b/src/call/local-conference-call.cpp index 8e95f37d7..82a970cf8 100644 --- a/src/call/local-conference-call.cpp +++ b/src/call/local-conference-call.cpp @@ -19,6 +19,7 @@ #include "conference/local-conference-p.h" #include "conference/participant-p.h" +#include "conference/session/media-session-p.h" #include "local-conference-call-p.h" // ============================================================================= @@ -50,6 +51,13 @@ LocalConferenceCall::LocalConferenceCall ( participant->getPrivate()->getSession()->configure(direction, cfg, op, from, to); } +LocalConferenceCall::~LocalConferenceCall () { + L_D(); + auto session = d->getActiveSession(); + if (session) + session->getPrivate()->setCallSessionListener(nullptr); +} + shared_ptr LocalConferenceCall::getCore () const { return Call::getCore(); } diff --git a/src/call/local-conference-call.h b/src/call/local-conference-call.h index 66153c7a8..792cdf38f 100644 --- a/src/call/local-conference-call.h +++ b/src/call/local-conference-call.h @@ -47,6 +47,7 @@ public: SalCallOp *op, const MediaSessionParams *msp ); + virtual ~LocalConferenceCall (); std::shared_ptr getCore () const; diff --git a/src/call/remote-conference-call.cpp b/src/call/remote-conference-call.cpp index 59d7feb19..8bd97fcb2 100644 --- a/src/call/remote-conference-call.cpp +++ b/src/call/remote-conference-call.cpp @@ -19,6 +19,7 @@ #include "conference/remote-conference-p.h" #include "conference/participant-p.h" +#include "conference/session/media-session-p.h" #include "remote-conference-call-p.h" // ============================================================================= @@ -50,6 +51,13 @@ RemoteConferenceCall::RemoteConferenceCall ( participant->getPrivate()->getSession()->configure(direction, cfg, op, from, to); } +RemoteConferenceCall::~RemoteConferenceCall () { + L_D(); + auto session = d->getActiveSession(); + if (session) + session->getPrivate()->setCallSessionListener(nullptr); +} + shared_ptr RemoteConferenceCall::getCore () const { return Call::getCore(); } diff --git a/src/call/remote-conference-call.h b/src/call/remote-conference-call.h index a2505cc80..069b54e2b 100644 --- a/src/call/remote-conference-call.h +++ b/src/call/remote-conference-call.h @@ -42,6 +42,7 @@ public: SalCallOp *op, const MediaSessionParams *msp ); + virtual ~RemoteConferenceCall (); std::shared_ptr getCore () const; diff --git a/src/conference/session/call-session.h b/src/conference/session/call-session.h index 9a0c5bdf0..7a6f02e50 100644 --- a/src/conference/session/call-session.h +++ b/src/conference/session/call-session.h @@ -43,6 +43,8 @@ class LINPHONE_PUBLIC CallSession : public Object, public CoreAccessor { friend class ClientGroupChatRoomPrivate; friend class Conference; friend class CorePrivate; + friend class LocalConferenceCall; + friend class RemoteConferenceCall; friend class ServerGroupChatRoom; friend class ServerGroupChatRoomPrivate;