Преглед на файлове

* Add consistency checks to the shortlist.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14953 54d463be-8e91-2dee-dedb-b68131a5f0ec
flaviojs преди 13 години
родител
ревизия
967eaaa7a5
променени са 2 файла, в които са добавени 19 реда и са изтрити 2 реда
  1. 2 0
      Changelog-Trunk.txt
  2. 17 2
      src/common/socket.c

+ 2 - 0
Changelog-Trunk.txt

@@ -1,5 +1,7 @@
 Date	Added
 
+2011/09/05
+	* Add consistency checks to the shortlist. [FlavioJS]
 2011/09/02
 	* Fixed @reloadmobdb wiping out monster spawn information. [Skotlex]
 2011/08/30

+ 17 - 2
src/common/socket.c

@@ -1353,6 +1353,12 @@ void send_shortlist_add_fd(int fd)
 	if( (send_shortlist_set[i]>>bit)&1 )
 		return;// already in the list
 
+	if( send_shortlist_count >= ARRAYLENGTH(send_shortlist_array) )
+	{
+		ShowDebug("send_shortlist_add_fd: shortlist is full, ignoring... (fd=%d shortlist.count=%d shortlist.length=%d)\n", fd, send_shortlist_count, ARRAYLENGTH(send_shortlist_array));
+		return;
+	}
+
 	// set the bit
 	send_shortlist_set[i] |= 1<<bit;
 	// Add to the end of the shortlist array.
@@ -1367,7 +1373,14 @@ void send_shortlist_do_sends()
 	while( i < send_shortlist_count )
 	{
 		int fd = send_shortlist_array[i];
+		int idx = fd/32;
+		int bit = fd%32;
 
+		if( ((send_shortlist_set[idx]>>bit)&1) == 0 )
+		{
+			ShowDebug("send_shortlist_do_sends: fd is not set, why is it in the shortlist? (fd=%d)\n", fd);
+		}
+		else
 		// If this session still exists, perform send operations on it and
 		// check for the eof state.
 		if( session[fd] )
@@ -1391,8 +1404,10 @@ void send_shortlist_do_sends()
 		}
 
 		// Remove fd from shortlist, move the last fd to the current position
-		send_shortlist_array[i] = send_shortlist_array[--send_shortlist_count];
-		send_shortlist_set[fd/32]&=~(1<<(fd%32));
+		--send_shortlist_count;
+		send_shortlist_array[i] = send_shortlist_array[send_shortlist_count];
+		send_shortlist_array[send_shortlist_count] = 0;
+		send_shortlist_set[idx]&=~(1<<bit);
 	}
 }
 #endif