mirror of
https://github.com/Detanup01/gbe_fork.git
synced 2024-11-27 13:14:01 +08:00
Fix possible thread issue.
This commit is contained in:
parent
29e713b94c
commit
e6031c7597
@ -70,6 +70,8 @@ public ISteamNetworking
|
|||||||
|
|
||||||
std::recursive_mutex messages_mutex;
|
std::recursive_mutex messages_mutex;
|
||||||
std::vector<Common_Message> messages;
|
std::vector<Common_Message> messages;
|
||||||
|
|
||||||
|
std::recursive_mutex connections_edit_mutex;
|
||||||
std::vector<struct Steam_Networking_Connection> connections;
|
std::vector<struct Steam_Networking_Connection> connections;
|
||||||
|
|
||||||
std::vector<struct steam_listen_socket> listen_sockets;
|
std::vector<struct steam_listen_socket> listen_sockets;
|
||||||
@ -79,11 +81,13 @@ public ISteamNetworking
|
|||||||
|
|
||||||
bool connection_exists(CSteamID id)
|
bool connection_exists(CSteamID id)
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::recursive_mutex> lock(connections_edit_mutex);
|
||||||
return std::find_if(connections.begin(), connections.end(), [&id](struct Steam_Networking_Connection const& conn) { return conn.remote == id;}) != connections.end();
|
return std::find_if(connections.begin(), connections.end(), [&id](struct Steam_Networking_Connection const& conn) { return conn.remote == id;}) != connections.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Steam_Networking_Connection *get_or_create_connection(CSteamID id)
|
struct Steam_Networking_Connection *get_or_create_connection(CSteamID id)
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::recursive_mutex> lock(connections_edit_mutex);
|
||||||
auto conn = std::find_if(connections.begin(), connections.end(), [&id](struct Steam_Networking_Connection const& conn) { return conn.remote == id;});
|
auto conn = std::find_if(connections.begin(), connections.end(), [&id](struct Steam_Networking_Connection const& conn) { return conn.remote == id;});
|
||||||
|
|
||||||
if (connections.end() == conn) {
|
if (connections.end() == conn) {
|
||||||
@ -98,13 +102,16 @@ struct Steam_Networking_Connection *get_or_create_connection(CSteamID id)
|
|||||||
|
|
||||||
void remove_connection(CSteamID id)
|
void remove_connection(CSteamID id)
|
||||||
{
|
{
|
||||||
auto conn = std::begin(connections);
|
{
|
||||||
while (conn != std::end(connections)) {
|
std::lock_guard<std::recursive_mutex> lock(connections_edit_mutex);
|
||||||
if (conn->remote == id) {
|
auto conn = std::begin(connections);
|
||||||
|
while (conn != std::end(connections)) {
|
||||||
|
if (conn->remote == id) {
|
||||||
|
|
||||||
conn = connections.erase(conn);
|
conn = connections.erase(conn);
|
||||||
} else {
|
} else {
|
||||||
++conn;
|
++conn;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user