diff options
author | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2011-01-31 11:30:57 +0000 |
---|---|---|
committer | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2011-01-31 11:30:57 +0000 |
commit | 748d2dbd9c453603ebf8968c9a747372b530da33 (patch) | |
tree | 57dd28dd97c8a9e47775dc1edc33c298003bbf95 /src/common/socket.c | |
parent | 4ca48efa52ab65853138653b30903528139d4919 (diff) | |
download | hercules-748d2dbd9c453603ebf8968c9a747372b530da33.tar.gz hercules-748d2dbd9c453603ebf8968c9a747372b530da33.tar.bz2 hercules-748d2dbd9c453603ebf8968c9a747372b530da33.tar.xz hercules-748d2dbd9c453603ebf8968c9a747372b530da33.zip |
* Fixed faulty WFIFO reallocation causing memory exhaustion (bugreport:4737, since r1816, related r11503, r11571, r11886 and r12232).
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14689 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/common/socket.c')
-rw-r--r-- | src/common/socket.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/common/socket.c b/src/common/socket.c index ff667cf2e..0111e9eed 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -584,7 +584,7 @@ int realloc_writefifo(int fd, size_t addition) if( session[fd]->wdata_size + addition > session[fd]->max_wdata ) { // grow rule; grow in multiples of WFIFO_SIZE newsize = WFIFO_SIZE; - while( session[fd]->wdata_size + addition > newsize ) newsize += newsize; + while( session[fd]->wdata_size + addition > newsize ) newsize += WFIFO_SIZE; } else if( session[fd]->max_wdata >= (size_t)2*(session[fd]->flag.server?FIFOSIZE_SERVERLINK:WFIFO_SIZE) @@ -667,9 +667,9 @@ int WFIFOSET(int fd, size_t len) // always keep a WFIFO_SIZE reserve in the buffer // For inter-server connections, let the reserve be 1/4th of the link size. - newreserve = s->wdata_size + ( s->flag.server ? FIFOSIZE_SERVERLINK / 4 : WFIFO_SIZE); + newreserve = s->flag.server ? FIFOSIZE_SERVERLINK / 4 : WFIFO_SIZE; - // readjust the buffer to the newly chosen size + // readjust the buffer to include the chosen reserve realloc_writefifo(fd, newreserve); #ifdef SEND_SHORTLIST |