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

Reply via email to