From 566c60a4026ff7f0041127c414cc210994f387c3 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Tue, 8 Feb 2011 21:55:42 -0600 Subject: [PATCH] gprs: Fixup error path When we try to register the GPRS D-Bus interface and fail for some reason, calling gprs_unregister is not really kosher since much of the initialization has not yet been done. Call an intermediate function instead. --- src/gprs.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/gprs.c b/src/gprs.c index 2ec43781..33711dce 100644 --- a/src/gprs.c +++ b/src/gprs.c @@ -2222,12 +2222,8 @@ void ofono_gprs_driver_unregister(const struct ofono_gprs_driver *d) g_drivers = g_slist_remove(g_drivers, (void *)d); } -static void gprs_unregister(struct ofono_atom *atom) +static void free_contexts(struct ofono_gprs *gprs) { - DBusConnection *conn = ofono_dbus_get_connection(); - struct ofono_gprs *gprs = __ofono_atom_get_data(atom); - struct ofono_modem *modem = __ofono_atom_get_modem(atom); - const char *path = __ofono_atom_get_path(atom); GSList *l; if (gprs->settings) { @@ -2246,6 +2242,16 @@ static void gprs_unregister(struct ofono_atom *atom) } g_slist_free(gprs->contexts); +} + +static void gprs_unregister(struct ofono_atom *atom) +{ + DBusConnection *conn = ofono_dbus_get_connection(); + struct ofono_gprs *gprs = __ofono_atom_get_data(atom); + struct ofono_modem *modem = __ofono_atom_get_modem(atom); + const char *path = __ofono_atom_get_path(atom); + + free_contexts(gprs); if (gprs->cid_map) { idmap_free(gprs->cid_map); @@ -2669,7 +2675,7 @@ static void ofono_gprs_finish_register(struct ofono_gprs *gprs) ofono_error("Could not create %s interface", OFONO_CONNECTION_MANAGER_INTERFACE); - gprs_unregister(gprs->atom); + free_contexts(gprs); return; }