From ecc3f1bf73cf9b219d2e7e802864406c557549a6 Mon Sep 17 00:00:00 2001 From: Slava Monich Date: Wed, 23 May 2018 16:48:01 +0300 Subject: [PATCH] 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. --- src/ussd.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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;