static void destroy_modem(gpointer data) { struct modem_info *modem = data; GSList *list; DBG("%s", modem->syspath); ofono_modem_remove(modem->modem); switch (modem->type) { case MODEM_TYPE_USB: for (list = modem->devices; list; list = list->next) { struct device_info *info = list->data; DBG("%s", info->devnode); device_info_free(info); } g_slist_free(modem->devices); break; case MODEM_TYPE_SERIAL: serial_device_info_free(modem->serial); break; } g_free(modem->syspath); g_free(modem->devname); g_free(modem->driver); g_free(modem->vendor); g_free(modem->model); g_free(modem); }
void pa__done(pa_module*m) { struct userdata *u; struct device_info *d; pa_assert(m); if (!m->userdata) return; u = m->userdata; if (u->sink_new_slot) pa_hook_slot_free(u->sink_new_slot); if (u->sink_unlink_slot) pa_hook_slot_free(u->sink_unlink_slot); if (u->sink_state_changed_slot) pa_hook_slot_free(u->sink_state_changed_slot); if (u->source_new_slot) pa_hook_slot_free(u->source_new_slot); if (u->source_unlink_slot) pa_hook_slot_free(u->source_unlink_slot); if (u->source_state_changed_slot) pa_hook_slot_free(u->source_state_changed_slot); if (u->sink_input_new_slot) pa_hook_slot_free(u->sink_input_new_slot); if (u->sink_input_unlink_slot) pa_hook_slot_free(u->sink_input_unlink_slot); if (u->sink_input_move_start_slot) pa_hook_slot_free(u->sink_input_move_start_slot); if (u->sink_input_move_finish_slot) pa_hook_slot_free(u->sink_input_move_finish_slot); if (u->sink_input_state_changed_slot) pa_hook_slot_free(u->sink_input_state_changed_slot); if (u->source_output_new_slot) pa_hook_slot_free(u->source_output_new_slot); if (u->source_output_unlink_slot) pa_hook_slot_free(u->source_output_unlink_slot); if (u->source_output_move_start_slot) pa_hook_slot_free(u->source_output_move_start_slot); if (u->source_output_move_finish_slot) pa_hook_slot_free(u->source_output_move_finish_slot); if (u->source_output_state_changed_slot) pa_hook_slot_free(u->source_output_state_changed_slot); while ((d = pa_hashmap_steal_first(u->device_infos))) device_info_free(d); pa_hashmap_free(u->device_infos, NULL, NULL); pa_xfree(u); }
static pa_hook_result_t device_unlink_hook_cb(pa_core *c, pa_object *o, struct userdata *u) { struct device_info *d; pa_assert(c); pa_object_assert_ref(o); pa_assert(u); if ((d = pa_hashmap_remove(u->device_infos, o))) device_info_free(d); return PA_HOOK_OK; }