Make overflow code a bit better
authorDenis Kenzior <denkenz@gmail.com>
Thu, 6 Aug 2009 19:23:04 +0000 (14:23 -0500)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 7 Aug 2009 00:49:11 +0000 (17:49 -0700)
gatchat/gatchat.c

index 8263ad7..6cb5207 100644 (file)
@@ -584,6 +584,10 @@ static void new_bytes(GAtChat *p)
                wrap -= p->read_so_far;
                p->read_so_far = 0;
        }
+
+       /* We're overflowing the buffer, shutdown the socket */
+       if (ring_buffer_avail(p->buf) == 0)
+               g_at_chat_shutdown(p);
 }
 
 static gboolean received_data(GIOChannel *channel, GIOCondition cond,
@@ -605,12 +609,8 @@ static gboolean received_data(GIOChannel *channel, GIOCondition cond,
 
                toread = ring_buffer_avail_no_wrap(chat->buf);
 
-               /* We're going to start overflowing the buffer
-                * this cannot happen under normal circumstances, so probably
-                * the channel is getting garbage, drop off
-                */
                if (toread == 0)
-                       return FALSE;
+                       break;
 
                buf = ring_buffer_write_ptr(chat->buf);
 
@@ -629,9 +629,6 @@ static gboolean received_data(GIOChannel *channel, GIOCondition cond,
        if (cond & (G_IO_HUP | G_IO_ERR))
                return FALSE;
 
-       if (err == G_IO_ERROR_NONE && rbytes == 0)
-               return FALSE;
-
        if (err != G_IO_ERROR_NONE && err != G_IO_ERROR_AGAIN)
                return FALSE;