Mercurial > pidgin
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); |
