CVSROOT: /cvsroot/wesnoth
Module name: wesnoth
Branch:
Changes by: David White <[EMAIL PROTECTED]> 05/01/23 22:04:20
Modified files:
src : network_worker.cpp
Log message:
attempt to fix bug where an assertion would fail in network_worker.cpp
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network_worker.cpp.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
Patches:
Index: wesnoth/src/network_worker.cpp
diff -u wesnoth/src/network_worker.cpp:1.14 wesnoth/src/network_worker.cpp:1.15
--- wesnoth/src/network_worker.cpp:1.14 Fri Dec 31 21:01:37 2004
+++ wesnoth/src/network_worker.cpp Sun Jan 23 22:04:20 2005
@@ -167,6 +167,24 @@
}
cond->notify_one();
+}
+
+namespace
+{
+
+void remove_buffers(TCPsocket sock)
+{
+ buffer_set new_bufs;
+ new_bufs.reserve(bufs.size());
+ for(buffer_set::iterator i = bufs.begin(), i_end = bufs.end(); i !=
i_end; ++i) {
+ if ((*i)->sock == sock)
+ delete *i;
+ else
+ new_bufs.push_back(*i);
+ }
+ bufs.swap(new_bufs);
+}
+
}
void close_socket(TCPsocket sock)
@@ -184,17 +202,8 @@
if(lock_it != sockets_locked.end()) {
sockets_locked.erase(lock_it);
}
-
- size_t size = bufs.size();
- buffer_set new_bufs;
- new_bufs.reserve(size);
- for(buffer_set::iterator i = bufs.begin(), i_end =
bufs.end(); i != i_end; ++i) {
- if ((*i)->sock == sock)
- delete *i;
- else
- new_bufs.push_back(*i);
- }
- bufs.swap(new_bufs);
+
+ remove_buffers(sock);
break;
}
@@ -209,7 +218,8 @@
if(i->second == SOCKET_ERROR) {
--socket_errors;
const TCPsocket res = i->first;
- sockets_locked.erase(i);
+ sockets_locked.erase(i);
+ remove_buffers(res);
return res;
}
}
@@ -218,4 +228,4 @@
return 0;
}
-}
+}
\ No newline at end of file