From e387488f024eecde6de6081a29f551aab2ba118b Mon Sep 17 00:00:00 2001 From: Minjun Li Date: Tue, 2 Jun 2009 08:50:35 +0800 Subject: Adding common unregister code in atmodem driver Modem cleanup happens in two places: manager_free (ofono exit) and manager_destroy (manually removing a specific modem). Both need to unregister the entire set of registered interfaces. manager_destroy function did not unregister all interfaces. Fixed by adding a common function for both code paths. --- drivers/atmodem/atmodem.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'drivers/atmodem/atmodem.c') diff --git a/drivers/atmodem/atmodem.c b/drivers/atmodem/atmodem.c index 2f1e4304..20b95a5f 100644 --- a/drivers/atmodem/atmodem.c +++ b/drivers/atmodem/atmodem.c @@ -90,6 +90,19 @@ static void at_destroy(struct at_data *at) g_free(at); } +static void interface_exit(struct at_data *at) +{ + at_sms_exit(at->modem); + at_call_forwarding_exit(at->modem); + at_call_settings_exit(at->modem); + at_network_registration_exit(at->modem); + at_voicecall_exit(at->modem); + at_call_meter_exit(at->modem); + at_call_barring_exit(at->modem); + at_ussd_exit(at->modem); + at_sim_exit(at->modem); +} + static void manager_free(gpointer user) { GSList *l; @@ -102,15 +115,7 @@ static void manager_free(gpointer user) for (l = g_sessions; l; l = l->next) { struct at_data *at = l->data; - at_sms_exit(at->modem); - at_call_forwarding_exit(at->modem); - at_call_settings_exit(at->modem); - at_network_registration_exit(at->modem); - at_voicecall_exit(at->modem); - at_call_meter_exit(at->modem); - at_call_barring_exit(at->modem); - at_ussd_exit(at->modem); - at_sim_exit(at->modem); + interface_exit(at); ofono_modem_unregister(at->modem); at_destroy(at); @@ -421,8 +426,7 @@ static DBusMessage *manager_destroy(DBusConnection *conn, DBusMessage *msg, if (strcmp(at->modem->path, path)) continue; - at_network_registration_exit(at->modem); - at_voicecall_exit(at->modem); + interface_exit(at); ofono_modem_unregister(at->modem); g_sessions = g_slist_remove(g_sessions, at); -- cgit v1.2.3