static void service_free(gpointer data) { struct connman_service *service = data; int i; if (service_if != NULL && service_if->selected_service == service) return; if (service->property_changed_wid != 0) g_dbus_remove_watch(service_if->dbus_cnx, service->property_changed_wid); for (i = 0; i < SERVICE_MAX; i++) { if (service->to_update[i] != 0) g_source_remove(service->to_update[i]); if (service->call_modify[i] != 0) { dbus_pending_call_cancel(service->call_modify[i]); dbus_pending_call_unref(service->call_modify[i]); } if (service->to_error[i] != 0) g_source_remove(service->to_error[i]); } g_free(service->path); g_free(service->error); g_free(service->name); g_free(service->type); g_free(service->security); g_free(service->nameservers); g_free(service->nameservers_conf); g_free(service->timeservers); g_free(service->timeservers_conf); g_free(service->domains); g_free(service->domains_conf); ipv4_free(service->ipv4); ipv4_free(service->ipv4_conf); ipv6_free(service->ipv6); ipv6_free(service->ipv6_conf); proxy_free(service->proxy); proxy_free(service->proxy_conf); provider_free(service->provider); ethernet_free(service->ethernet); g_free(service); }
void free_interface(struct interface *ifp) { if (ifp == NULL) return; ipv4_free(ifp); dhcp_free(ifp); ipv6_free(ifp); dhcp6_free(ifp); ipv6nd_free(ifp); free_options(ifp->options); free(ifp); }