fixed threading bugs
This commit is contained in:
parent
1334566d95
commit
009dc54817
1 changed files with 15 additions and 14 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue