Hi Renat,

On 03/12/2013 09:37 AM, [email protected] wrote:
From: Renat Zaripov<[email protected]>

---
  plugins/sim900.c |  201 ++++++++++++++++++++++++++++++++++++++++++++++--------
  1 file changed, 171 insertions(+), 30 deletions(-)


I applied this patch, however here are a few comments:

@@ -119,10 +132,32 @@ static GAtChat *open_device(struct ofono_modem *modem,
        if (channel == NULL)
                return NULL;

+       data->device = channel;
        syntax = g_at_syntax_new_gsm_permissive();
        chat = g_at_chat_new(channel, syntax);
        g_at_syntax_unref(syntax);

+       if (chat == NULL)
+               return NULL;

In this case you are not destroying the data->device object. This is a potential memory leak. I fixed this for you in commit b4518caa50f03b40e9f9434dc17558665bb8ee3f

+
+       if (getenv("OFONO_AT_DEBUG"))
+               g_at_chat_set_debug(chat, sim900_debug, debug);
+
+       return chat;
+}
+

<snip>

@@ -134,6 +169,96 @@ static GAtChat *open_device(struct ofono_modem *modem,
        return chat;
  }

+static void shutdown_device(struct sim900_data *data)
+{
+       int i, fd;

make --no-print-directory all-am
  CC     plugins/sim900.o
cc1: warnings being treated as errors
plugins/sim900.c: In function ‘shutdown_device’:
plugins/sim900.c:180:9: error: unused variable ‘fd’
make[1]: *** [plugins/sim900.o] Error 1
make: *** [all] Error 2

Please 'make distcheck' before submitting patches.

+
+       DBG("");
+
+       for (i = 0; i<  NUM_DLC; i++) {
+               if (data->dlcs[i] == NULL)
+                       continue;
+
+               g_at_chat_unref(data->dlcs[i]);
+               data->dlcs[i] = NULL;
+       }
+
+       if (data->mux) {
+               g_at_mux_shutdown(data->mux);
+               g_at_mux_unref(data->mux);
+               data->mux = NULL;
+               goto done;

This goto seems redundant. I got rid of this for you in commit 548611e93948902ccffaf5568dcd31bef1d4f764.

+       }
+
+done:
+       g_io_channel_unref(data->device);
+       data->device = NULL;
+}
+

<snip>

  static void cfun_disable(gboolean ok, GAtResult *result, gpointer user_data)
  {
        struct ofono_modem *modem = user_data;
@@ -181,8 +307,11 @@ static void cfun_disable(gboolean ok, GAtResult *result, 
gpointer user_data)

        DBG("");

-       g_at_chat_unref(data->modem);
-       data->modem = NULL;
+       g_at_mux_shutdown(data->mux);
+       g_at_mux_unref(data->mux);
+
+       g_at_chat_unref(data->dlcs[SETUP_DLC]);
+       data->dlcs[SETUP_DLC] = NULL;

        if (ok)
                ofono_modem_set_powered(modem, FALSE);


@@ -194,12 +323,11 @@ static int sim900_disable(struct ofono_modem *modem)

        DBG("%p", modem);

-       g_at_chat_cancel_all(data->modem);
-       g_at_chat_unregister_all(data->modem);
-
-       g_at_chat_send(data->modem, "AT+CFUN=4", none_prefix,
+       g_at_chat_send(data->dlcs[SETUP_DLC], "AT+CFUN=4", none_prefix,
                                        cfun_disable, modem, NULL);

+       shutdown_device(data);
+

Calling shutdown_device here is premature. I bet that you're never actually sending the CFUN=4 with this setup because you close the tty before that happens. I fixed this in commit 93ac1669a069a1bcce1ed121ca60977db53abf4e. If you disagree, please let me know.

        return -EINPROGRESS;
  }


Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to