diff options
author | Dara Spieker-Doyle <dara.spiekerdoyle@gmail.com> | 2011-06-13 16:01:31 -0700 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2011-06-12 17:47:27 -0500 |
commit | 388fe2f45ab4503176892b0299541352f13362e7 (patch) | |
tree | e3e42d4d5a049dd2b1ed286fe6e26b1d530dd93f /src/cdma-voicecall.c | |
parent | b91726213cb50967d7d21d3ac4ca5addb4c2846d (diff) | |
download | ofono-388fe2f45ab4503176892b0299541352f13362e7.tar.bz2 |
cdma-voicecall: Fix for crash when unregistering atom
Diffstat (limited to 'src/cdma-voicecall.c')
-rw-r--r-- | src/cdma-voicecall.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/cdma-voicecall.c b/src/cdma-voicecall.c index a590063e..183433de 100644 --- a/src/cdma-voicecall.c +++ b/src/cdma-voicecall.c @@ -335,6 +335,18 @@ void ofono_cdma_voicecall_driver_unregister( g_drivers = g_slist_remove(g_drivers, (void *)d); } +static void cdma_voicecall_unregister(struct ofono_atom *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_CDMA_VOICECALL_MANAGER_INTERFACE); + ofono_modem_remove_interface(modem, + OFONO_CDMA_VOICECALL_MANAGER_INTERFACE); +} + static void voicecall_manager_remove(struct ofono_atom *atom) { struct ofono_cdma_voicecall *vc = __ofono_atom_get_data(atom); @@ -405,6 +417,8 @@ void ofono_cdma_voicecall_register(struct ofono_cdma_voicecall *vc) ofono_modem_add_interface(modem, OFONO_CDMA_VOICECALL_MANAGER_INTERFACE); + + __ofono_atom_register(vc->atom, cdma_voicecall_unregister); } void ofono_cdma_voicecall_remove(struct ofono_cdma_voicecall *vc) |