summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-08-17 15:14:05 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-08-17 15:14:05 -0500
commit255c6ba0d9e34d517bd17614d12e44573eea62a9 (patch)
treef45c0ac35bb3e2601855ed5a85087dca9d1a7639
parent6d5090eafa3ea6f8c18dc67f2ad7c3428b50af88 (diff)
downloadofono-255c6ba0d9e34d517bd17614d12e44573eea62a9.tar.bz2
Cleanup atom watches properly
-rw-r--r--src/call-barring.c19
-rw-r--r--src/call-forwarding.c8
-rw-r--r--src/call-settings.c8
3 files changed, 29 insertions, 6 deletions
diff --git a/src/call-barring.c b/src/call-barring.c
index 61177a2d..4961bc35 100644
--- a/src/call-barring.c
+++ b/src/call-barring.c
@@ -61,6 +61,8 @@ struct ofono_call_barring {
struct ofono_ussd *ussd;
unsigned int incoming_bar_watch;
unsigned int outgoing_bar_watch;
+ unsigned int ssn_watch;
+ unsigned int ussd_watch;
const struct ofono_call_barring_driver *driver;
void *driver_data;
struct ofono_atom *atom;
@@ -1059,7 +1061,7 @@ static void call_barring_unregister(struct ofono_atom *atom)
struct ofono_call_barring *cb = __ofono_atom_get_data(atom);
const char *path = __ofono_atom_get_path(cb->atom);
DBusConnection *conn = ofono_dbus_get_connection();
- struct ofono_modem *modem= __ofono_atom_get_modem(cb->atom);
+ struct ofono_modem *modem = __ofono_atom_get_modem(cb->atom);
ofono_modem_remove_interface(modem, OFONO_CALL_BARRING_INTERFACE);
g_dbus_unregister_interface(conn, path, OFONO_CALL_BARRING_INTERFACE);
@@ -1071,6 +1073,12 @@ static void call_barring_unregister(struct ofono_atom *atom)
__ofono_ssn_mo_watch_remove(cb->ssn, cb->incoming_bar_watch);
if (cb->outgoing_bar_watch)
__ofono_ssn_mt_watch_remove(cb->ssn, cb->outgoing_bar_watch);
+
+ if (cb->ssn_watch)
+ __ofono_modem_remove_atom_watch(modem, cb->ssn_watch);
+
+ if (cb->ussd_watch)
+ __ofono_modem_remove_atom_watch(modem, cb->ussd_watch);
}
static void call_barring_remove(struct ofono_atom *atom)
@@ -1187,15 +1195,18 @@ void ofono_call_barring_register(struct ofono_call_barring *cb)
ofono_modem_add_interface(modem, OFONO_CALL_BARRING_INTERFACE);
- __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_SSN,
- ssn_watch, cb, NULL);
+ cb->ssn_watch = __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_SSN,
+ ssn_watch, cb, NULL);
+
ssn_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_SSN);
if (ssn_atom && __ofono_atom_get_registered(ssn_atom))
ssn_watch(ssn_atom, OFONO_ATOM_WATCH_CONDITION_REGISTERED, cb);
- __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_USSD,
+ cb->ussd_watch = __ofono_modem_add_atom_watch(modem,
+ OFONO_ATOM_TYPE_USSD,
ussd_watch, cb, NULL);
+
ussd_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_USSD);
if (ussd_atom && __ofono_atom_get_registered(ussd_atom))
diff --git a/src/call-forwarding.c b/src/call-forwarding.c
index b5e26360..90f8579f 100644
--- a/src/call-forwarding.c
+++ b/src/call-forwarding.c
@@ -51,6 +51,7 @@ struct ofono_call_forwarding {
int query_end;
struct cf_ss_request *ss_req;
struct ofono_ussd *ussd;
+ unsigned int ussd_watch;
const struct ofono_call_forwarding_driver *driver;
void *driver_data;
struct ofono_atom *atom;
@@ -1115,6 +1116,9 @@ static void call_forwarding_unregister(struct ofono_atom *atom)
if (cf->ussd)
cf_unregister_ss_controls(cf);
+
+ if (cf->ussd_watch)
+ __ofono_modem_remove_atom_watch(modem, cf->ussd_watch);
}
static void call_forwarding_remove(struct ofono_atom *atom)
@@ -1202,8 +1206,10 @@ void ofono_call_forwarding_register(struct ofono_call_forwarding *cf)
ofono_modem_add_interface(modem, OFONO_CALL_FORWARDING_INTERFACE);
- __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_USSD,
+ cf->ussd_watch = __ofono_modem_add_atom_watch(modem,
+ OFONO_ATOM_TYPE_USSD,
ussd_watch, cf, NULL);
+
ussd_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_USSD);
if (ussd_atom && __ofono_atom_get_registered(ussd_atom))
diff --git a/src/call-settings.c b/src/call-settings.c
index 249ff508..6928ee2e 100644
--- a/src/call-settings.c
+++ b/src/call-settings.c
@@ -61,6 +61,7 @@ struct ofono_call_settings {
int ss_req_cls;
enum call_setting_type ss_setting;
struct ofono_ussd *ussd;
+ unsigned int ussd_watch;
const struct ofono_call_settings_driver *driver;
void *driver_data;
struct ofono_atom *atom;
@@ -1178,6 +1179,9 @@ static void call_settings_unregister(struct ofono_atom *atom)
if (cs->ussd)
cs_unregister_ss_controls(cs);
+
+ if (cs->ussd_watch)
+ __ofono_modem_remove_atom_watch(modem, cs->ussd_watch);
}
static void call_settings_remove(struct ofono_atom *atom)
@@ -1268,8 +1272,10 @@ void ofono_call_settings_register(struct ofono_call_settings *cs)
ofono_modem_add_interface(modem, OFONO_CALL_SETTINGS_INTERFACE);
- __ofono_modem_add_atom_watch(modem, OFONO_ATOM_TYPE_USSD,
+ cs->ussd_watch = __ofono_modem_add_atom_watch(modem,
+ OFONO_ATOM_TYPE_USSD,
ussd_watch, cs, NULL);
+
ussd_atom = __ofono_modem_find_atom(modem, OFONO_ATOM_TYPE_USSD);
if (ussd_atom && __ofono_atom_get_registered(ussd_atom))