summaryrefslogtreecommitdiffstats
path: root/src/gprs.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2011-02-08 21:55:42 -0600
committerDenis Kenzior <denkenz@gmail.com>2011-02-08 21:55:42 -0600
commit566c60a4026ff7f0041127c414cc210994f387c3 (patch)
treee52d57041ec745a263f4f02059e7e32acabd0948 /src/gprs.c
parent7243af46faba56f7928797f28af6bc22593983a1 (diff)
downloadofono-566c60a4026ff7f0041127c414cc210994f387c3.tar.bz2
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.
Diffstat (limited to 'src/gprs.c')
-rw-r--r--src/gprs.c18
1 files 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;
}