diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-08-06 14:23:04 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-08-06 16:38:45 -0500 |
commit | 1418c2aec18ec81b3ce4806bae46614cc1fe672c (patch) | |
tree | fd0ae0e5511d25622d0ad3937b04007f7e646378 | |
parent | 9d0b4feafa0e5086983f5463858cb750acc5a3d9 (diff) | |
download | ofono-1418c2aec18ec81b3ce4806bae46614cc1fe672c.tar.bz2 |
Make overflow code a bit better
-rw-r--r-- | gatchat/gatchat.c | 13 |
1 files 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; |