fixed threading bugs

This commit is contained in:
Dave White 2004-10-29 22:03:46 +00:00
parent 1334566d95
commit 009dc54817

View file

@ -180,22 +180,23 @@ void close_socket(TCPsocket sock)
const threading::lock lock(*global_mutex);
const socket_state_map::iterator lock_it = sockets_locked.find(sock);
if(lock_it != sockets_locked.end() && lock_it->second == SOCKET_LOCKED) {
continue;
} else if(lock_it != sockets_locked.end()) {
sockets_locked.erase(lock_it);
}
std::multiset<buffer>::iterator i = bufs.begin();
while(i != bufs.end()) {
if(i->sock == sock) {
bufs.erase(i++);
} else {
++i;
if(lock_it == sockets_locked.end() || lock_it->second != SOCKET_LOCKED) {
if(lock_it != sockets_locked.end()) {
sockets_locked.erase(lock_it);
}
}
return;
std::multiset<buffer>::iterator i = bufs.begin();
while(i != bufs.end()) {
if(i->sock == sock) {
bufs.erase(i++);
} else {
++i;
}
}
break;
}
}
}