From b5f43330d44bba4540e6ef25dc6f03be342681c1 Mon Sep 17 00:00:00 2001 From: Stefan Becker Date: Sun, 4 Dec 2011 15:05:41 +0200 Subject: [PATCH] core cleanup: separate code for sipe_connection_cleanup() sipe-core.c feels the best place to move most of the code to. --- src/core/sip-transport.c | 2 +- src/core/sipe-core-private.h | 5 +++++ src/core/sipe-core.c | 50 ++++++++++++++++++++++++++++++++++++++++++- src/core/sipe.c | 51 +------------------------------------------- src/core/sipe.h | 5 +++-- 5 files changed, 59 insertions(+), 54 deletions(-) diff --git a/src/core/sip-transport.c b/src/core/sip-transport.c index c5b89008..91b0e59f 100644 --- a/src/core/sip-transport.c +++ b/src/core/sip-transport.c @@ -1195,7 +1195,7 @@ static gboolean process_register_response(struct sipe_core_private *sipe_private g_strfreev(parts); /* Close old connection */ - sipe_connection_cleanup(sipe_private); + sipe_core_connection_cleanup(sipe_private); /* Create new connection */ sipe_server_register(sipe_private, transport, hostname, port); diff --git a/src/core/sipe-core-private.h b/src/core/sipe-core-private.h index 2722ee9f..c11a42c8 100644 --- a/src/core/sipe-core-private.h +++ b/src/core/sipe-core-private.h @@ -127,6 +127,11 @@ struct sipe_core_private { #define SIPE_ACCOUNT_DATA SIPE_CORE_PRIVATE->temporary #define SIPE_ACCOUNT_DATA_PRIVATE sipe_private->temporary +/** + * sipe-core internal functions + */ +void sipe_core_connection_cleanup(struct sipe_core_private *sipe_private); + /* Local Variables: mode: c diff --git a/src/core/sipe-core.c b/src/core/sipe-core.c index 7269f571..27f62b81 100644 --- a/src/core/sipe-core.c +++ b/src/core/sipe-core.c @@ -30,11 +30,13 @@ #include #include "sipe-common.h" +#include "http-conn.h" /* sipe-cal.h requires this */ #include "sip-csta.h" #include "sip-sec.h" #include "sip-transport.h" #include "sipe-backend.h" #include "sipe-buddy.h" +#include "sipe-cal.h" #include "sipe-certificate.h" #include "sipe-chat.h" #include "sipe-conf.h" @@ -42,9 +44,12 @@ #include "sipe-core-private.h" #include "sipe-crypt.h" #include "sipe-group.h" +#include "sipe-groupchat.h" #include "sipe-media.h" #include "sipe-mime.h" #include "sipe-nls.h" +#include "sipe-ocs2007.h" +#include "sipe-schedule.h" #include "sipe-session.h" #include "sipe-subscriptions.h" #include "sipe-svc.h" @@ -279,6 +284,49 @@ struct sipe_core_public *sipe_core_allocate(const gchar *signin_name, return((struct sipe_core_public *)sipe_private); } +void sipe_core_connection_cleanup(struct sipe_core_private *sipe_private) +{ + struct sipe_account_data *sip = SIPE_ACCOUNT_DATA_PRIVATE; + + g_free(sipe_private->epid); + sipe_private->epid = NULL; + + sip_transport_disconnect(sipe_private); + + sipe_schedule_cancel_all(sipe_private); + + if (sip->allow_events) { + GSList *entry = sip->allow_events; + while (entry) { + g_free(entry->data); + entry = entry->next; + } + } + g_slist_free(sip->allow_events); + + sipe_ocs2007_free(sipe_private); + + sipe_blist_menu_free_containers(sipe_private); + + if (sipe_private->contact) + g_free(sipe_private->contact); + sipe_private->contact = NULL; + if (sip->regcallid) + g_free(sip->regcallid); + sip->regcallid = NULL; + + if (sipe_private->focus_factory_uri) + g_free(sipe_private->focus_factory_uri); + sipe_private->focus_factory_uri = NULL; + + if (sip->cal) { + sipe_cal_calendar_free(sip->cal); + } + sip->cal = NULL; + + sipe_groupchat_free(sipe_private); +} + void sipe_core_deallocate(struct sipe_core_public *sipe_public) { struct sipe_core_private *sipe_private = SIPE_CORE_PRIVATE; @@ -312,7 +360,7 @@ void sipe_core_deallocate(struct sipe_core_public *sipe_public) sip_transport_deregister(sipe_private); } - sipe_connection_cleanup(sipe_private); + sipe_core_connection_cleanup(sipe_private); g_free(sipe_private->public.sip_name); g_free(sipe_private->public.sip_domain); g_free(sipe_private->username); diff --git a/src/core/sipe.c b/src/core/sipe.c index 8f4337c7..649d1127 100644 --- a/src/core/sipe.c +++ b/src/core/sipe.c @@ -87,7 +87,6 @@ #include "sipe-core.h" #include "sipe-core-private.h" #include "sipe-dialog.h" -#include "sipe-groupchat.h" #include "sipe-im.h" #include "sipe-nls.h" #include "sipe-ocs2005.h" @@ -868,53 +867,6 @@ void sipe_purple_setup(struct sipe_core_public *sipe_public, sip->account = purple_connection_get_account(gc); } -static void -sipe_blist_menu_free_containers(struct sipe_core_private *sipe_private); - -void sipe_connection_cleanup(struct sipe_core_private *sipe_private) -{ - struct sipe_account_data *sip = SIPE_ACCOUNT_DATA_PRIVATE; - - g_free(sipe_private->epid); - sipe_private->epid = NULL; - - sip_transport_disconnect(sipe_private); - - sipe_schedule_cancel_all(sipe_private); - - if (sip->allow_events) { - GSList *entry = sip->allow_events; - while (entry) { - g_free(entry->data); - entry = entry->next; - } - } - g_slist_free(sip->allow_events); - - sipe_ocs2007_free(sipe_private); - - /* libpurple memory leak workaround */ - sipe_blist_menu_free_containers(sipe_private); - - if (sipe_private->contact) - g_free(sipe_private->contact); - sipe_private->contact = NULL; - if (sip->regcallid) - g_free(sip->regcallid); - sip->regcallid = NULL; - - if (sipe_private->focus_factory_uri) - g_free(sipe_private->focus_factory_uri); - sipe_private->focus_factory_uri = NULL; - - if (sip->cal) { - sipe_cal_calendar_free(sip->cal); - } - sip->cal = NULL; - - sipe_groupchat_free(sipe_private); -} - void sipe_core_reset_status(struct sipe_core_public *sipe_public) { struct sipe_core_private *sipe_private = SIPE_CORE_PRIVATE; @@ -1445,8 +1397,7 @@ sipe_buddy_menu_access_level_add_domain_cb(PurpleBuddy *buddy) * That means that after the buddy menu has been closed we have unused * resources but at least we don't leak them anymore... */ -static void -sipe_blist_menu_free_containers(struct sipe_core_private *sipe_private) +void sipe_blist_menu_free_containers(struct sipe_core_private *sipe_private) { GSList *entry = sipe_private->blist_menu_containers; while (entry) { diff --git a/src/core/sipe.h b/src/core/sipe.h index 0709164c..84c40750 100644 --- a/src/core/sipe.h +++ b/src/core/sipe.h @@ -111,8 +111,6 @@ struct sipe_account_data { * - are needed by the already created new modules */ -/* ??? module */ -void sipe_connection_cleanup(struct sipe_core_private *sipe_private); #ifdef _SIPE_NEED_ACTIVITIES /* need to improve or reduce visibility of this interface */ const gchar *sipe_activity_to_token(sipe_activity); @@ -140,6 +138,9 @@ void sipe_apply_calendar_status(struct sipe_core_private *sipe_private, struct sipe_buddy *sbuddy, const char *status_id); +/* libpurple memory leak workaround */ +void sipe_blist_menu_free_containers(struct sipe_core_private *sipe_private); + /* this should be in backend? */ void sipe_backend_account_status_and_note(struct sipe_core_private *sipe_private, const gchar *status_id); -- 2.11.4.GIT