---
 drivers/mbmmodem/location-reporting.c |   44 ++++++++++++++++++---------------
 1 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/drivers/mbmmodem/location-reporting.c 
b/drivers/mbmmodem/location-reporting.c
index 941fac4..b671d71 100644
--- a/drivers/mbmmodem/location-reporting.c
+++ b/drivers/mbmmodem/location-reporting.c
@@ -48,7 +48,7 @@ static const char *e2gpsctl_prefix[] = { "*E2GPSCTL:", NULL };
 
 struct gps_data {
        GAtChat *chat;
-       GAtChat *data_chat;
+       GIOChannel *data_channel;
 };
 
 static void mbm_e2gpsctl_disable_cb(gboolean ok, GAtResult *result,
@@ -70,7 +70,7 @@ static void mbm_e2gpsctl_disable_cb(gboolean ok, GAtResult 
*result,
                return;
        }
 
-       g_at_chat_unref(gd->data_chat);
+       g_io_channel_unref(gd->data_channel);
 
        CALLBACK_WITH_SUCCESS(cb, cbd->data);
 }
@@ -94,33 +94,33 @@ static void mbm_location_reporting_disable(struct 
ofono_location_reporting *lr,
        g_free(cbd);
 }
 
-static int mbm_create_data_chat(struct ofono_location_reporting *lr)
+static GAtChat *mbm_create_data_chat(struct ofono_location_reporting *lr)
 {
        struct gps_data *gd = ofono_location_reporting_get_data(lr);
        struct ofono_modem *modem;
        const char *gps_dev;
        GAtSyntax *syntax;
-       GIOChannel *channel;
-       int fd;
+       GAtChat *chat;
 
        modem = ofono_location_reporting_get_modem(lr);
        gps_dev = ofono_modem_get_string(modem, "GPSDevice");
 
-       channel = g_at_tty_open(gps_dev, NULL);
-       if (channel == NULL)
-               return -1;
+       gd->data_channel = g_at_tty_open(gps_dev, NULL);
+       if (gd->data_channel == NULL)
+               return NULL;
 
        syntax = g_at_syntax_new_gsm_permissive();
-       gd->data_chat = g_at_chat_new(channel, syntax);
-       fd = g_io_channel_unix_get_fd(channel);
+       chat = g_at_chat_new(gd->data_channel, syntax);
 
        g_at_syntax_unref(syntax);
-       g_io_channel_unref(channel);
 
-       if (gd->data_chat == NULL)
-               return -1;
+       if (chat == NULL) {
+               g_io_channel_unref(gd->data_channel);
+
+               return NULL;
+       }
 
-       return fd;
+       return chat;
 }
 
 static void mbm_e2gpsctl_enable_cb(gboolean ok, GAtResult *result,
@@ -131,7 +131,7 @@ static void mbm_e2gpsctl_enable_cb(gboolean ok, GAtResult 
*result,
        struct ofono_location_reporting *lr = cbd->user;
        struct gps_data *gd = ofono_location_reporting_get_data(lr);
        struct ofono_error error;
-       int fd;
+       GAtChat *chat;
 
        DBG("lr=%p ok=%d", lr, ok);
 
@@ -143,18 +143,22 @@ static void mbm_e2gpsctl_enable_cb(gboolean ok, GAtResult 
*result,
                return;
        }
 
-       fd = mbm_create_data_chat(lr);
-
-       if (fd < 0)
+       chat = mbm_create_data_chat(lr);
+       if (chat == NULL)
                goto out;
 
-       if (g_at_chat_send(gd->data_chat, "AT*E2GPSNPD", NULL, NULL, NULL,
-                                                               NULL) > 0) {
+       if (g_at_chat_send(chat, "AT*E2GPSNPD", NULL, NULL, NULL, NULL) > 0) {
+               int fd = g_io_channel_unix_get_fd(gd->data_channel);
+
+               g_at_chat_unref(chat);
                cb(&error, fd, cbd->data);
 
                return;
        }
 
+       g_at_chat_unref(chat);
+       g_io_channel_unref(gd->data_channel);
+
 out:
        CALLBACK_WITH_FAILURE(cb, -1, cbd->data);
 }
-- 
1.7.4.1

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

Reply via email to