diff --git a/dll/steam_client.cpp b/dll/steam_client.cpp index be7c378..2e5c5ca 100644 --- a/dll/steam_client.cpp +++ b/dll/steam_client.cpp @@ -19,21 +19,22 @@ #include -static void network_thread(Networking *network) +static void background_thread(Steam_Client *client) { - PRINT_DEBUG("network thread starting\n"); + PRINT_DEBUG("background thread starting\n"); while (1) { std::this_thread::sleep_for(std::chrono::seconds(1)); global_mutex.lock(); - if (!network->isAlive()) { + if (!client->network->isAlive()) { global_mutex.unlock(); //delete network; - PRINT_DEBUG("network thread exit\n"); + PRINT_DEBUG("background thread exit\n"); return; } - PRINT_DEBUG("network thread run\n"); - network->Run(); + PRINT_DEBUG("background thread run\n"); + client->network->Run(); + client->steam_matchmaking->RunBackground(); global_mutex.unlock(); } } @@ -1672,7 +1673,7 @@ void Steam_Client::UnregisterCallResult( class CCallbackBase *pCallback, SteamAP void Steam_Client::RunCallbacks(bool runClientCB, bool runGameserverCB) { std::lock_guard lock(global_mutex); - if (!network_keepalive.joinable()) network_keepalive = std::thread(network_thread, network); + if (!background_keepalive.joinable()) background_keepalive = std::thread(background_thread, this); network->Run(); PRINT_DEBUG("Steam_Client::RunCallbacks steam_matchmaking_servers\n"); diff --git a/dll/steam_client.h b/dll/steam_client.h index 0f208ea..08803e6 100644 --- a/dll/steam_client.h +++ b/dll/steam_client.h @@ -115,7 +115,7 @@ public: bool user_logged_in = false; bool server_init = false; - std::thread network_keepalive; + std::thread background_keepalive; Steam_Client(); ~Steam_Client(); diff --git a/dll/steam_friends.h b/dll/steam_friends.h index e63f63d..039b5a1 100644 --- a/dll/steam_friends.h +++ b/dll/steam_friends.h @@ -462,6 +462,7 @@ CSteamID GetFriendFromSourceByIndex( CSteamID steamIDSource, int iFriend ) bool IsUserInSource( CSteamID steamIDUser, CSteamID steamIDSource ) { PRINT_DEBUG("Steam_Friends::IsUserInSource %llu %llu\n", steamIDUser.ConvertToUint64(), steamIDSource.ConvertToUint64()); + std::lock_guard lock(global_mutex); if (steamIDUser == settings->get_local_steam_id()) { if (settings->get_lobby() == steamIDSource) { return true; diff --git a/dll/steam_matchmaking.h b/dll/steam_matchmaking.h index 1c65a27..e822da7 100644 --- a/dll/steam_matchmaking.h +++ b/dll/steam_matchmaking.h @@ -1115,8 +1115,7 @@ bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent ) return false; } - -void RunCallbacks() +void RunBackground() { remove_lobbies(); Create_pending_lobbies(); @@ -1125,6 +1124,11 @@ void RunCallbacks() send_lobby_data(); last_sent_lobbies = std::chrono::high_resolution_clock::now(); } +} + +void RunCallbacks() +{ + RunBackground(); if (searching) { PRINT_DEBUG("Searching for lobbies %zu\n", lobbies.size());