The detach_shutdown method is invoked to unconditionally release
an active context.  For QMI, this is equivalent to a call to
deactivate_primary.

This patch makes the callback to deactivate_primary optional and
implements detach_shutdown to simply call it.  When there is no
callback, the stop_net callback notifies ofono about the context
release via an asynchronous ofono_gprs_context_deactivated() call.
---
 drivers/qmimodem/gprs-context.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/qmimodem/gprs-context.c b/drivers/qmimodem/gprs-context.c
index 3743bb2..2085898 100644
--- a/drivers/qmimodem/gprs-context.c
+++ b/drivers/qmimodem/gprs-context.c
@@ -309,14 +309,19 @@ static void stop_net_cb(struct qmi_result *result, void 
*user_data)
        DBG("");
 
        if (qmi_result_set_error(result, NULL)) {
-               CALLBACK_WITH_FAILURE(cb, cbd->data);
+               if (cb)
+                       CALLBACK_WITH_FAILURE(cb, cbd->data);
                return;
        }
 
-       data->active_context = 0;
        data->pkt_handle = 0;
 
-       CALLBACK_WITH_SUCCESS(cb, cbd->data);
+       if (cb)
+               CALLBACK_WITH_SUCCESS(cb, cbd->data);
+       else
+               ofono_gprs_context_deactivated(gc, data->active_context); 
+
+       data->active_context = 0;
 }
 
 static void qmi_deactivate_primary(struct ofono_gprs_context *gc,
@@ -343,11 +348,20 @@ static void qmi_deactivate_primary(struct 
ofono_gprs_context *gc,
        qmi_param_free(param);
 
 error:
-       CALLBACK_WITH_FAILURE(cb, cbd->data);
+       if (cb)
+               CALLBACK_WITH_FAILURE(cb, user_data);
 
        g_free(cbd);
 }
 
+static void qmi_gprs_context_detach_shutdown(struct ofono_gprs_context *gc,
+                                               unsigned int cid)
+{
+       DBG("");
+
+       qmi_deactivate_primary(gc, cid, NULL, NULL);
+}
+
 static void create_wds_cb(struct qmi_service *service, void *user_data)
 {
        struct ofono_gprs_context *gc = user_data;
@@ -476,6 +490,7 @@ static struct ofono_gprs_context_driver driver = {
        .activate_primary       = qmi_activate_primary,
        .deactivate_primary     = qmi_deactivate_primary,
        .read_settings          = qmi_gprs_read_settings,
+       .detach_shutdown        = qmi_gprs_context_detach_shutdown,
 };
 
 void qmi_gprs_context_init(void)
-- 
2.9.3

_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to