[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Wesnoth-cvs-commits] wesnoth/src network.cpp network_worker.cpp
From: |
David White |
Subject: |
[Wesnoth-cvs-commits] wesnoth/src network.cpp network_worker.cpp |
Date: |
Sun, 20 Mar 2005 20:33:37 -0500 |
CVSROOT: /cvsroot/wesnoth
Module name: wesnoth
Branch:
Changes by: David White <address@hidden> 05/03/21 01:33:36
Modified files:
src : network.cpp network_worker.cpp
Log message:
fixed network crashes
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network.cpp.diff?tr1=1.55&tr2=1.56&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network_worker.cpp.diff?tr1=1.22&tr2=1.23&r1=text&r2=text
Patches:
Index: wesnoth/src/network.cpp
diff -u wesnoth/src/network.cpp:1.55 wesnoth/src/network.cpp:1.56
--- wesnoth/src/network.cpp:1.55 Thu Mar 10 20:59:20 2005
+++ wesnoth/src/network.cpp Mon Mar 21 01:33:36 2005
@@ -1,12 +1,12 @@
#include "global.hpp"
-
+
+#include "serialization/binary_wml.hpp"
#include "config.hpp"
#include "log.hpp"
#include "network.hpp"
#include "network_worker.hpp"
#include "util.hpp"
#include "wassert.hpp"
-#include "serialization/binary_wml.hpp"
#include "SDL_net.h"
@@ -101,6 +101,7 @@
}
SDLNet_SocketSet socket_set = 0;
+std::set<network::connection> waiting_sockets;
typedef std::vector<network::connection> sockets_list;
sockets_list sockets;
@@ -184,6 +185,7 @@
worker_pool_man = NULL;
SDLNet_FreeSocketSet(socket_set);
socket_set = 0;
+ waiting_sockets.clear();
SDLNet_Quit();
}
}
@@ -270,7 +272,9 @@
throw network::error("Could not add socket to socket set");
}
- sockets.push_back(connect);
+ waiting_sockets.insert(connect);
+
+ sockets.push_back(connect);
wassert(schemas.count(connect) == 0);
schemas.insert(std::pair<network::connection,schema_pair>(connect,schema_pair()));
@@ -349,6 +353,7 @@
throw network::error("Could not add socket to socket
set");
}
+
const connection connect = create_connection(sock,"",0);
//send back their connection number
@@ -359,7 +364,8 @@
throw network::error("Could not send initial
handshake");
}
- sockets.push_back(connect);
+ waiting_sockets.insert(connect);
+ sockets.push_back(connect);
wassert(schemas.count(connect) == 0);
schemas.insert(std::pair<network::connection,schema_pair>(connect,schema_pair()));
return connect;
@@ -398,6 +404,7 @@
const TCPsocket sock = get_socket(s);
+ waiting_sockets.erase(s);
SDLNet_TCP_DelSocket(socket_set,sock);
SDLNet_TCP_Close(sock);
@@ -459,7 +466,7 @@
const int res = SDLNet_CheckSockets(socket_set,0);
- for(sockets_list::const_iterator i = sockets.begin(); res != 0 && i !=
sockets.end(); ++i) {
+ for(std::set<network::connection>::iterator i =
waiting_sockets.begin(); res != 0 && i != waiting_sockets.end(); ) {
connection_details& details = get_connection_details(*i);
const TCPsocket sock = details.sock;
if(SDLNet_SocketReady(sock)) {
@@ -479,8 +486,11 @@
continue;
}
- network_worker_pool::receive_data(sock);
+ waiting_sockets.erase(i++);
SDLNet_TCP_DelSocket(socket_set,sock);
+ network_worker_pool::receive_data(sock);
+ } else {
+ ++i;
}
}
@@ -502,13 +512,15 @@
}
if(result == 0) {
+ assert(false);
return result;
}
+ waiting_sockets.insert(result);
const schema_map::iterator schema = schemas.find(result);
wassert(schema != schemas.end());
- read_compressed(cfg, std::string(buf.begin(), buf.end()),
schema->second.incoming);
+
read_compressed(cfg,std::string(buf.begin(),buf.end()),schema->second.incoming);
return result;
}
@@ -556,7 +568,7 @@
const schema_map::iterator schema = schemas.find(connection_num);
wassert(schema != schemas.end());
- const std::string& value = write_compressed(cfg,
schema->second.outgoing);
+ const std::string& value =
write_compressed(cfg,schema->second.outgoing);
// std::cerr << "--- SEND DATA to " << ((int)connection_num) << ": '"
// << cfg.write() << "'\n--- END SEND DATA\n";
Index: wesnoth/src/network_worker.cpp
diff -u wesnoth/src/network_worker.cpp:1.22 wesnoth/src/network_worker.cpp:1.23
--- wesnoth/src/network_worker.cpp:1.22 Sun Mar 13 10:32:21 2005
+++ wesnoth/src/network_worker.cpp Mon Mar 21 01:33:36 2005
@@ -107,7 +107,7 @@
for(; itor != itor_end; ++itor) {
socket_state_map::iterator lock_it =
sockets_locked.find((*itor)->sock);
wassert(lock_it !=
sockets_locked.end());
- if(lock_it->second == SOCKET_READY) {
+ if(lock_it->second == SOCKET_READY) {
lock_it->second = SOCKET_LOCKED;
sent_buf = *itor;
sock = sent_buf->sock;
@@ -121,7 +121,7 @@
for(; itor != itor_end; ++itor) {
socket_state_map::iterator
lock_it = sockets_locked.find(*itor);
wassert(lock_it !=
sockets_locked.end());
- if(lock_it->second ==
SOCKET_READY) {
+ if(lock_it->second ==
SOCKET_READY) {
lock_it->second =
SOCKET_LOCKED;
sock = *itor;
pending_receives.erase(itor);
@@ -213,7 +213,6 @@
{
const threading::lock lock(*global_mutex);
managed = false;
- sockets_locked.clear();
socket_errors = 0;
}
cond->notify_all();
@@ -229,7 +228,9 @@
delete global_mutex;
delete cond;
global_mutex = NULL;
- cond = NULL;
+ cond = NULL;
+
+ sockets_locked.clear();
LOG_NW << "exiting manager::~manager()\n";
}
@@ -362,4 +363,4 @@
return current_transfer_stats;
}
-}
+}
\ No newline at end of file
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Wesnoth-cvs-commits] wesnoth/src network.cpp network_worker.cpp,
David White <=