mirror of git://git.sysmocom.de/ofono
Cleanup atom watches properly
This commit is contained in:
parent
6d5090eafa
commit
255c6ba0d9
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue