----------------------------------------------------------------- Revision: 1d533cebad7c0dbda8ec8ebee1334d27dcae5f9c Ancestor: 4d5c3b5ef59ce60e98576ffc7edf6ebb0960fff1 Author: markdoliner@pidgin.im Date: 2008-06-30T22:58:18 Branch: im.pidgin.pidgin Modified files: libpurple/protocols/jabber/jabber.c ChangeLog: Only check for EAGAIN if read returned less than 0. This fixes a bug where the recv callback function would get called continuously if the server closed our connection and errno happened to be set to EAGAIN. ============================================================ --- libpurple/protocols/jabber/jabber.c e98b3c84ef06f15c947b3190304799abef8f30b3 +++ libpurple/protocols/jabber/jabber.c f005b3dede749de2f533f11c1c70a8575f2ef47a @@ -430,12 +430,17 @@ jabber_recv_cb_ssl(gpointer data, Purple jabber_stream_init(js); } - if(errno == EAGAIN) + if(len < 0 && errno == EAGAIN) return; - else + else { + if (len == 0) + purple_debug_info("jabber", "Server closed the connection.\n"); + else + purple_debug_info("jabber", "Disconnected: %s\n", g_strerror(errno)); purple_connection_error_reason (js->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Read Error")); + } } static void @@ -470,9 +475,13 @@ jabber_recv_cb(gpointer data, gint sourc jabber_parser_process(js, buf, len); if(js->reinit) jabber_stream_init(js); - } else if(errno == EAGAIN) { + } else if(len < 0 && errno == EAGAIN) { return; } else { + if (len == 0) + purple_debug_info("jabber", "Server closed the connection.\n"); + else + purple_debug_info("jabber", "Disconnected: %s\n", g_strerror(errno)); purple_connection_error_reason (js->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Read Error"));