comparison src/proxy.c @ 13786:5ddde4ad1ca2

[gaim-migrate @ 16198] Fix some places where a closed socket isn't being dealt with correctly. This may be the cause of the high CPU usage that some people have noticed. Most of these were reported by Eduardo P?rez. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Fri, 26 May 2006 03:26:03 +0000
parents c502ed5ae9f6
children 24b768639db5
comparison
equal deleted inserted replaced
13785:10f702a4d3dc 13786:5ddde4ad1ca2
1117 max_read = phb->read_buf_len - phb->read_len - 1; 1117 max_read = phb->read_buf_len - phb->read_len - 1;
1118 1118
1119 len = read(source, p, max_read); 1119 len = read(source, p, max_read);
1120 if(len < 0 && errno == EAGAIN) 1120 if(len < 0 && errno == EAGAIN)
1121 return; 1121 return;
1122 else if(len < 0) { 1122 else if(len <= 0) {
1123 close(source); 1123 close(source);
1124 source = -1; 1124 source = -1;
1125 g_free(phb->read_buffer); 1125 g_free(phb->read_buffer);
1126 phb->read_buffer = NULL; 1126 phb->read_buffer = NULL;
1127 gaim_input_remove(phb->inpa); 1127 gaim_input_remove(phb->inpa);
1506 buf = phb->read_buffer + phb->read_len; 1506 buf = phb->read_buffer + phb->read_len;
1507 max_read = phb->read_buf_len - phb->read_len; 1507 max_read = phb->read_buf_len - phb->read_len;
1508 1508
1509 len = read(source, buf, max_read); 1509 len = read(source, buf, max_read);
1510 1510
1511 if ((len < 0 && errno == EAGAIN) || len + phb->read_len < 4) 1511 if ((len < 0 && errno == EAGAIN) || (len > 0 && len + phb->read_len < 4))
1512 return; 1512 return;
1513 else if (len + phb->read_len >= 4) { 1513 else if (len + phb->read_len >= 4) {
1514 if (phb->read_buffer[1] == 90) { 1514 if (phb->read_buffer[1] == 90) {
1515 if (phb->account == NULL || 1515 if (phb->account == NULL ||
1516 gaim_account_get_connection(phb->account) != NULL) { 1516 gaim_account_get_connection(phb->account) != NULL) {
1661 gaim_debug_info("socks5 proxy", "Able to read again.\n"); 1661 gaim_debug_info("socks5 proxy", "Able to read again.\n");
1662 1662
1663 len = read(source, dest, (phb->read_buf_len - phb->read_len)); 1663 len = read(source, dest, (phb->read_buf_len - phb->read_len));
1664 if(len < 0 && errno == EAGAIN) 1664 if(len < 0 && errno == EAGAIN)
1665 return; 1665 return;
1666 else if(len < 0) { 1666 else if(len <= 0) {
1667 gaim_debug_warning("socks5 proxy", "or not...\n"); 1667 gaim_debug_warning("socks5 proxy", "or not...\n");
1668 close(source); 1668 close(source);
1669 gaim_input_remove(phb->inpa); 1669 gaim_input_remove(phb->inpa);
1670 g_free(phb->read_buffer); 1670 g_free(phb->read_buffer);
1671 phb->read_buffer = NULL; 1671 phb->read_buffer = NULL;
1773 1773
1774 len = read(source, phb->read_buffer + phb->read_len, 1774 len = read(source, phb->read_buffer + phb->read_len,
1775 phb->read_buf_len - phb->read_len); 1775 phb->read_buf_len - phb->read_len);
1776 if(len < 0 && errno == EAGAIN) 1776 if(len < 0 && errno == EAGAIN)
1777 return; 1777 return;
1778 else if(len < 0) { 1778 else if(len <= 0) {
1779 close(source); 1779 close(source);
1780 gaim_input_remove(phb->inpa); 1780 gaim_input_remove(phb->inpa);
1781 g_free(phb->read_buffer); 1781 g_free(phb->read_buffer);
1782 phb->read_buffer = NULL; 1782 phb->read_buffer = NULL;
1783 try_connect(phb); 1783 try_connect(phb);
1865 len = read(source, phb->read_buffer + phb->read_len, 1865 len = read(source, phb->read_buffer + phb->read_len,
1866 phb->read_buf_len - phb->read_len); 1866 phb->read_buf_len - phb->read_len);
1867 1867
1868 if(len < 0 && errno == EAGAIN) 1868 if(len < 0 && errno == EAGAIN)
1869 return; 1869 return;
1870 else if(len < 0) { 1870 else if(len <= 0) {
1871 close(source); 1871 close(source);
1872 gaim_input_remove(phb->inpa); 1872 gaim_input_remove(phb->inpa);
1873 g_free(phb->read_buffer); 1873 g_free(phb->read_buffer);
1874 phb->read_buffer = NULL; 1874 phb->read_buffer = NULL;
1875 try_connect(phb); 1875 try_connect(phb);
1992 1992
1993 len = read(source, phb->read_buffer + phb->read_len, 1993 len = read(source, phb->read_buffer + phb->read_len,
1994 phb->read_buf_len - phb->read_len); 1994 phb->read_buf_len - phb->read_len);
1995 if(len < 0 && errno == EAGAIN) 1995 if(len < 0 && errno == EAGAIN)
1996 return; 1996 return;
1997 else if(len < 0) { 1997 else if(len <= 0) {
1998 close(source); 1998 close(source);
1999 gaim_input_remove(phb->inpa); 1999 gaim_input_remove(phb->inpa);
2000 g_free(phb->read_buffer); 2000 g_free(phb->read_buffer);
2001 phb->read_buffer = NULL; 2001 phb->read_buffer = NULL;
2002 try_connect(phb); 2002 try_connect(phb);