From c44b85c3564fcbe348d8e1a6659e12483d1c6fbe Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Sat, 24 Jul 2010 20:51:10 +0200 Subject: [PATCH] audio: when going offline, hang up the call The media session was left running when user changed state to Offline, further attempt to close the call window crashed Pidgin. --- src/core/sipe-core.c | 9 +++++++++ src/core/sipe-media.c | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/sipe-core.c b/src/core/sipe-core.c index e2a1589b..0b7bd53e 100644 --- a/src/core/sipe-core.c +++ b/src/core/sipe-core.c @@ -43,6 +43,7 @@ #include "sipe-nls.h" #include "sipe-session.h" #include "sipe-subscriptions.h" +#include "sipe-media.h" #include "sipe.h" void sipe_core_init(const char *locale_dir) @@ -181,6 +182,14 @@ void sipe_core_deallocate(struct sipe_core_public *sipe_public) } } +#ifdef HAVE_VV + if (sipe_private->media_call) { + /* This must be done after all sessions are closed, otherwise + * SIP BYE is not sent to the call participant. */ + sipe_media_hangup(sipe_private); + } +#endif + if (sip->csta) { sip_csta_close(sipe_private); } diff --git a/src/core/sipe-media.c b/src/core/sipe-media.c index 013256b7..5399ee02 100644 --- a/src/core/sipe-media.c +++ b/src/core/sipe-media.c @@ -480,8 +480,7 @@ static void call_hangup_cb(struct sipe_media_call *call, gboolean local) call_private->with); if (session) { - struct sip_dialog *dialog = session->dialogs->data; - sip_transport_bye(call_private->sipe_private, dialog); + sipe_session_close(call_private->sipe_private, session); } } call_private->sipe_private->media_call = NULL; -- 2.11.4.GIT