---
 gatchat/gatserver.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c
index cad9d91..251c3b8 100644
--- a/gatchat/gatserver.c
+++ b/gatchat/gatserver.c
@@ -116,6 +116,7 @@ struct _GAtServer {
        gboolean destroyed;                     /* Re-entrancy guard */
        char *read_line;                        /* Current read line */
        unsigned int read_pos;                  /* Current read offset */
+       gboolean parse_ready;                   /* Ready to parse command */
 };
 
 static void g_at_server_wakeup_writer(GAtServer *server);
@@ -196,6 +197,8 @@ static void g_at_server_send_result(GAtServer *server, 
GAtServerResult result)
                sprintf(buf, "%u", (unsigned int)result);
 
        send_result_common(server, buf);
+
+       server->parse_ready = TRUE;
 }
 
 void g_at_server_send_final(GAtServer *server, GAtServerResult result)
@@ -216,6 +219,8 @@ void g_at_server_send_final(GAtServer *server, 
GAtServerResult result)
 void g_at_server_send_ext_final(GAtServer *server, const char *result)
 {
        send_result_common(server, result);
+
+       server->parse_ready = TRUE;
 }
 
 void g_at_server_send_intermediate(GAtServer *server, const char *result)
@@ -671,7 +676,7 @@ static void new_bytes(GAtServer *p)
        unsigned char *buf = ring_buffer_read_ptr(p->read_buf, p->read_so_far);
        enum ParserResult result;
 
-       while (p->channel && (p->read_so_far < len)) {
+       while (p->channel && p->parse_ready && (p->read_so_far < len)) {
                gsize rbytes = MIN(len - p->read_so_far, wrap - p->read_so_far);
                result = server_feed(p, (char *)buf, &rbytes);
 
@@ -703,6 +708,7 @@ static void new_bytes(GAtServer *p)
                        p->read_line = extract_line(p);
                        if (p->read_line) {
                                p->read_pos = 0;
+                               p->parse_ready = FALSE;
 
                                server_parse_line(p);
                        } else
@@ -945,6 +951,7 @@ GAtServer *g_at_server_new(GIOChannel *io)
        server->ref_count = 1;
        v250_settings_create(&server->v250);
        server->channel = io;
+       server->parse_ready = TRUE;
        server->command_list = g_hash_table_new_full(g_str_hash, g_str_equal,
                                                        g_free,
                                                        at_notify_node_destroy);
-- 
1.6.6.1

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

Reply via email to