static void sms_unregister(struct ofono_atom *atom) { struct ofono_sms *sms = __ofono_atom_get_data(atom); DBusConnection *conn = ofono_dbus_get_connection(); struct ofono_modem *modem = __ofono_atom_get_modem(atom); const char *path = __ofono_atom_get_path(atom); g_dbus_unregister_interface(conn, path, OFONO_MESSAGE_MANAGER_INTERFACE); ofono_modem_remove_interface(modem, OFONO_MESSAGE_MANAGER_INTERFACE); if (sms->mw_watch) { __ofono_modem_remove_atom_watch(modem, sms->mw_watch); sms->mw_watch = 0; sms->mw = NULL; } if (sms->status_watch) { __ofono_netreg_remove_status_watch(sms->netreg, sms->status_watch); sms->status_watch = 0; } if (sms->netreg_watch) { __ofono_modem_remove_atom_watch(modem, sms->netreg_watch); sms->netreg_watch = 0; } sms->netreg = NULL; if (sms->messages) { GHashTableIter iter; struct message *m; gpointer key, value; g_hash_table_iter_init(&iter, sms->messages); while (g_hash_table_iter_next(&iter, &key, &value)) { m = value; message_dbus_unregister(m); } g_hash_table_destroy(sms->messages); sms->messages = NULL; } __ofono_watchlist_free(sms->text_handlers); sms->text_handlers = NULL; __ofono_watchlist_free(sms->datagram_handlers); sms->datagram_handlers = NULL; }
static void modem_unregister(struct ofono_modem *modem) { DBusConnection *conn = ofono_dbus_get_connection(); DBG("%p", modem); if (modem->powered == TRUE) set_powered(modem, FALSE); __ofono_watchlist_free(modem->atom_watches); modem->atom_watches = NULL; __ofono_watchlist_free(modem->online_watches); modem->online_watches = NULL; __ofono_watchlist_free(modem->powered_watches); modem->powered_watches = NULL; modem->sim_watch = 0; modem->sim_ready_watch = 0; g_slist_foreach(modem->interface_list, (GFunc) g_free, NULL); g_slist_free(modem->interface_list); modem->interface_list = NULL; g_slist_foreach(modem->feature_list, (GFunc) g_free, NULL); g_slist_free(modem->feature_list); modem->feature_list = NULL; if (modem->timeout) { g_source_remove(modem->timeout); modem->timeout = 0; } if (modem->pending) { dbus_message_unref(modem->pending); modem->pending = NULL; } if (modem->interface_update) { g_source_remove(modem->interface_update); modem->interface_update = 0; } if (modem->lock_watch) { lockdown_remove(modem); ofono_dbus_signal_property_changed(conn, modem->path, OFONO_MODEM_INTERFACE, "Lockdown", DBUS_TYPE_BOOLEAN, &modem->lockdown); } g_dbus_unregister_interface(conn, modem->path, OFONO_MODEM_INTERFACE); if (modem->driver && modem->driver->remove) modem->driver->remove(modem); g_hash_table_destroy(modem->properties); modem->properties = NULL; modem->driver = NULL; emit_modem_removed(modem); call_modemwatches(modem, FALSE); }
void __ofono_modemwatch_cleanup(void) { __ofono_watchlist_free(g_modemwatches); }