summaryrefslogtreecommitdiff
path: root/src/ussd.c
diff options
context:
space:
mode:
authorSlava Monich <slava.monich@jolla.com>2018-05-23 16:48:01 +0300
committerDenis Kenzior <denkenz@gmail.com>2018-05-23 10:23:25 -0500
commitecc3f1bf73cf9b219d2e7e802864406c557549a6 (patch)
tree72e674c85566a6b4e8a22044d1c93547f9310f2c /src/ussd.c
parentff85d63149761863ca77b33e913ca2c7a2e62800 (diff)
downloadofono-ecc3f1bf73cf9b219d2e7e802864406c557549a6.tar.gz
ussd: Cancel pending requests when unregistering
And reset state to idle before unregistering the D-Bus interface. This may occur e.g. when we receive REFRESH from STK.
Diffstat (limited to 'src/ussd.c')
-rw-r--r--src/ussd.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/ussd.c b/src/ussd.c
index f5dd9d9e..23b33235 100644
--- a/src/ussd.c
+++ b/src/ussd.c
@@ -810,6 +810,22 @@ static void ussd_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);
+ DBusMessage *reply;
+
+ if (ussd->pending) {
+ reply = __ofono_error_canceled(ussd->pending);
+ __ofono_dbus_pending_reply(&ussd->pending, reply);
+ }
+
+ if (ussd->cancel) {
+ reply = dbus_message_new_method_return(ussd->cancel);
+ __ofono_dbus_pending_reply(&ussd->cancel, reply);
+ }
+
+ if (ussd->req)
+ ussd_request_finish(ussd, -ECANCELED, 0, NULL, 0);
+
+ ussd_change_state(ussd, USSD_STATE_IDLE);
g_slist_free_full(ussd->ss_control_list, ssc_entry_destroy);
ussd->ss_control_list = NULL;