Unregister AT notifiers when removing gprs driver. --- drivers/atmodem/gprs.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/atmodem/gprs.c b/drivers/atmodem/gprs.c index bf82d06..dcf9759 100644 --- a/drivers/atmodem/gprs.c +++ b/drivers/atmodem/gprs.c @@ -48,6 +48,8 @@ static const char *none_prefix[] = { NULL }; struct gprs_data { GAtChat *chat; unsigned int vendor; + guint cgev_id; + guint cgreg_id; }; static void at_cgatt_cb(gboolean ok, GAtResult *result, gpointer user_data) @@ -181,9 +183,10 @@ static void gprs_initialized(gboolean ok, GAtResult *result, gpointer user_data) struct ofono_gprs *gprs = user_data; struct gprs_data *gd = ofono_gprs_get_data(gprs); - g_at_chat_register(gd->chat, "+CGEV:", cgev_notify, FALSE, gprs, NULL); - g_at_chat_register(gd->chat, "+CGREG:", cgreg_notify, - FALSE, gprs, NULL); + gd->cgev_id = g_at_chat_register(gd->chat, "+CGEV:", cgev_notify, + FALSE, gprs, NULL); + gd->cgreg_id = g_at_chat_register(gd->chat, "+CGREG:", cgreg_notify, + FALSE, gprs, NULL); ofono_gprs_register(gprs); } @@ -321,6 +324,9 @@ static void at_gprs_remove(struct ofono_gprs *gprs) { struct gprs_data *gd = ofono_gprs_get_data(gprs); + g_at_chat_unregister(gd->chat, gd->cgev_id); + g_at_chat_unregister(gd->chat, gd->cgreg_id); + ofono_gprs_set_data(gprs, NULL); g_free(gd); } -- 1.7.0.4 _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono