Cleanup atom watches properly

This commit is contained in:
Denis Kenzior 2009-08-17 15:14:05 -05:00
parent 6d5090eafa
commit 255c6ba0d9
3 changed files with 29 additions and 6 deletions

View File

@ -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))

View File

@ -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))

View File

@ -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))