From 1418c2aec18ec81b3ce4806bae46614cc1fe672c Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 6 Aug 2009 14:23:04 -0500 Subject: [PATCH] Make overflow code a bit better --- gatchat/gatchat.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/gatchat/gatchat.c b/gatchat/gatchat.c index 8263ad71..6cb52074 100644 --- a/gatchat/gatchat.c +++ b/gatchat/gatchat.c @@ -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;