From 443e2d92da2d746ddd3859f8365eb8b155127fdc Mon Sep 17 00:00:00 2001 From: Minjun Li Date: Mon, 1 Jun 2009 09:09:54 +0800 Subject: [PATCH] Adding a remove and unregister function for interfaces --- drivers/atmodem/atmodem.c | 37 +++++++++++++++++-------------- 1 files changed, 20 insertions(+), 17 deletions(-) mode change 100644 => 100755 drivers/atmodem/at.h mode change 100644 => 100755 drivers/atmodem/atmodem.c mode change 100644 => 100755 drivers/atmodem/call-barring.c mode change 100644 => 100755 drivers/atmodem/call-forwarding.c mode change 100644 => 100755 drivers/atmodem/call-meter.c mode change 100644 => 100755 drivers/atmodem/call-settings.c mode change 100644 => 100755 drivers/atmodem/network-registration.c mode change 100644 => 100755 drivers/atmodem/session.c mode change 100644 => 100755 drivers/atmodem/session.h mode change 100644 => 100755 drivers/atmodem/sim.c mode change 100644 => 100755 drivers/atmodem/sms.c mode change 100644 => 100755 drivers/atmodem/ussd.c mode change 100644 => 100755 drivers/atmodem/voicecall.c diff --git a/drivers/atmodem/at.h b/drivers/atmodem/at.h old mode 100644 new mode 100755 diff --git a/drivers/atmodem/atmodem.c b/drivers/atmodem/atmodem.c old mode 100644 new mode 100755 index 2f1e430..6df1598 --- a/drivers/atmodem/atmodem.c +++ b/drivers/atmodem/atmodem.c @@ -90,19 +90,10 @@ static void at_destroy(struct at_data *at) g_free(at); } -static void manager_free(gpointer user) +static void foo_free(struct at_data *at) { - GSList *l; - - for (l = g_pending; l; l = l->next) - g_io_channel_unref(l->data); - - g_slist_free(g_pending); - - for (l = g_sessions; l; l = l->next) { - struct at_data *at = l->data; - - at_sms_exit(at->modem); + if (at){ + at_sms_exit(at->modem); at_call_forwarding_exit(at->modem); at_call_settings_exit(at->modem); at_network_registration_exit(at->modem); @@ -112,9 +103,23 @@ static void manager_free(gpointer user) at_ussd_exit(at->modem); at_sim_exit(at->modem); ofono_modem_unregister(at->modem); - at_destroy(at); } +} + +static void manager_free(gpointer user) +{ + GSList *l; + + for (l = g_pending; l; l = l->next) + g_io_channel_unref(l->data); + + g_slist_free(g_pending); + + for (l = g_sessions; l; l = l->next) { + struct at_data *at = l->data; + foo_free(at); + } g_slist_free(g_sessions); } @@ -421,12 +426,10 @@ 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); - ofono_modem_unregister(at->modem); + foo_free(at); g_sessions = g_slist_remove(g_sessions, at); - at_destroy(at); + modem_list(&modems); dbus_gsm_signal_array_property_changed(conn, "/", diff --git a/drivers/atmodem/call-barring.c b/drivers/atmodem/call-barring.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/call-forwarding.c b/drivers/atmodem/call-forwarding.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/call-meter.c b/drivers/atmodem/call-meter.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/call-settings.c b/drivers/atmodem/call-settings.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/session.c b/drivers/atmodem/session.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/session.h b/drivers/atmodem/session.h old mode 100644 new mode 100755 diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/ussd.c b/drivers/atmodem/ussd.c old mode 100644 new mode 100755 diff --git a/drivers/atmodem/voicecall.c b/drivers/atmodem/voicecall.c old mode 100644 new mode 100755 -- 1.6.0.3