Explorar o código

* Fixed faulty WFIFO reallocation causing memory exhaustion (bugreport:4737, since r1816, related r11503, r11571, r11886 and r12232).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14689 54d463be-8e91-2dee-dedb-b68131a5f0ec
ai4rei %!s(int64=14) %!d(string=hai) anos
pai
achega
8fb6c1f646
Modificáronse 2 ficheiros con 5 adicións e 3 borrados
  1. 2 0
      Changelog-Trunk.txt
  2. 3 3
      src/common/socket.c

+ 2 - 0
Changelog-Trunk.txt

@@ -1,5 +1,7 @@
 Date	Added
 
+2011/01/31
+	* Fixed faulty WFIFO reallocation causing memory exhaustion (bugreport:4737, since r1816, related r11503, r11571, r11886 and r12232). [Ai4rei]
 2011/01/30
 	* Fixed equipped items' bonus no longer working after log-in until next status recalc, due to missing pc_setequipindex which was previously called by pc_checkitem (bugreport:2604, since r14685). [Ai4rei]
 2011/01/29

+ 3 - 3
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