+ learned the lesson, lock the global mutex in different other places just to be on the safe side, after lego 2k I am hesitent about all APIs, will this slow things down?

+ refactor some debug messages
This commit is contained in:
otavepto 2023-12-19 22:17:29 +02:00
parent 1333168d4a
commit 4fb6dcb3fa
9 changed files with 90 additions and 35 deletions

View File

@ -177,6 +177,7 @@ bool steamclient_has_ipv6_functions()
static void *create_client_interface(const char *ver) static void *create_client_interface(const char *ver)
{ {
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (strstr(ver, "SteamClient") == ver) { if (strstr(ver, "SteamClient") == ver) {
void *steam_client; void *steam_client;

View File

@ -165,11 +165,15 @@ bool Steam_Apps::BGetDLCDataByIndex( int iDLC, AppId_t *pAppID, bool *pbAvailabl
void Steam_Apps::InstallDLC( AppId_t nAppID ) void Steam_Apps::InstallDLC( AppId_t nAppID )
{ {
PRINT_DEBUG("InstallDLC\n"); PRINT_DEBUG("InstallDLC\n");
// we lock here because the API is supposed to modify the DLC list
std::lock_guard<std::recursive_mutex> lock(global_mutex);
} }
void Steam_Apps::UninstallDLC( AppId_t nAppID ) void Steam_Apps::UninstallDLC( AppId_t nAppID )
{ {
PRINT_DEBUG("UninstallDLC\n"); PRINT_DEBUG("UninstallDLC\n");
// we lock here because the API is supposed to modify the DLC list
std::lock_guard<std::recursive_mutex> lock(global_mutex);
} }
@ -227,7 +231,7 @@ void Steam_Apps::RequestAppProofOfPurchaseKey( AppId_t nAppID )
bool Steam_Apps::GetCurrentBetaName( char *pchName, int cchNameBufferSize ) bool Steam_Apps::GetCurrentBetaName( char *pchName, int cchNameBufferSize )
{ {
PRINT_DEBUG("GetCurrentBetaName %i\n", cchNameBufferSize); PRINT_DEBUG("GetCurrentBetaName %i\n", cchNameBufferSize);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName && cchNameBufferSize > settings->current_branch_name.size()) { if (pchName && cchNameBufferSize > settings->current_branch_name.size()) {
memcpy(pchName, settings->current_branch_name.c_str(), settings->current_branch_name.size()); memcpy(pchName, settings->current_branch_name.c_str(), settings->current_branch_name.size());
} }
@ -239,6 +243,7 @@ bool Steam_Apps::GetCurrentBetaName( char *pchName, int cchNameBufferSize )
bool Steam_Apps::MarkContentCorrupt( bool bMissingFilesOnly ) bool Steam_Apps::MarkContentCorrupt( bool bMissingFilesOnly )
{ {
PRINT_DEBUG("MarkContentCorrupt\n"); PRINT_DEBUG("MarkContentCorrupt\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
//TODO: warn user //TODO: warn user
return true; return true;
} }
@ -248,8 +253,8 @@ uint32 Steam_Apps::GetInstalledDepots( AppId_t appID, DepotId_t *pvecDepots, uin
{ {
PRINT_DEBUG("GetInstalledDepots %u, %u\n", appID, cMaxDepots); PRINT_DEBUG("GetInstalledDepots %u, %u\n", appID, cMaxDepots);
//TODO not sure about the behavior of this function, I didn't actually test this. //TODO not sure about the behavior of this function, I didn't actually test this.
if (!pvecDepots) return 0;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!pvecDepots) return 0;
unsigned int count = settings->depots.size(); unsigned int count = settings->depots.size();
if (cMaxDepots < count) count = cMaxDepots; if (cMaxDepots < count) count = cMaxDepots;
std::copy(settings->depots.begin(), settings->depots.begin() + count, pvecDepots); std::copy(settings->depots.begin(), settings->depots.begin() + count, pvecDepots);
@ -319,6 +324,7 @@ bool Steam_Apps::BIsAppInstalled( AppId_t appID )
CSteamID Steam_Apps::GetAppOwner() CSteamID Steam_Apps::GetAppOwner()
{ {
PRINT_DEBUG("GetAppOwner\n"); PRINT_DEBUG("GetAppOwner\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return settings->get_local_steam_id(); return settings->get_local_steam_id();
} }
@ -337,6 +343,7 @@ const char *Steam_Apps::GetLaunchQueryParam( const char *pchKey )
bool Steam_Apps::GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal ) bool Steam_Apps::GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloaded, uint64 *punBytesTotal )
{ {
PRINT_DEBUG("GetDlcDownloadProgress\n"); PRINT_DEBUG("GetDlcDownloadProgress\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -345,6 +352,7 @@ bool Steam_Apps::GetDlcDownloadProgress( AppId_t nAppID, uint64 *punBytesDownloa
int Steam_Apps::GetAppBuildId() int Steam_Apps::GetAppBuildId()
{ {
PRINT_DEBUG("GetAppBuildId\n"); PRINT_DEBUG("GetAppBuildId\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return this->settings->build_id; return this->settings->build_id;
} }
@ -427,6 +435,7 @@ int Steam_Apps::GetLaunchCommandLine( char *pszCommandLine, int cubCommandLine )
bool Steam_Apps::BIsSubscribedFromFamilySharing() bool Steam_Apps::BIsSubscribedFromFamilySharing()
{ {
PRINT_DEBUG("BIsSubscribedFromFamilySharing\n"); PRINT_DEBUG("BIsSubscribedFromFamilySharing\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -434,6 +443,7 @@ bool Steam_Apps::BIsSubscribedFromFamilySharing()
bool Steam_Apps::BIsTimedTrial( uint32* punSecondsAllowed, uint32* punSecondsPlayed ) bool Steam_Apps::BIsTimedTrial( uint32* punSecondsAllowed, uint32* punSecondsPlayed )
{ {
PRINT_DEBUG("BIsTimedTrial\n"); PRINT_DEBUG("BIsTimedTrial\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -441,5 +451,6 @@ bool Steam_Apps::BIsTimedTrial( uint32* punSecondsAllowed, uint32* punSecondsPla
bool Steam_Apps::SetDlcContext( AppId_t nAppID ) bool Steam_Apps::SetDlcContext( AppId_t nAppID )
{ {
PRINT_DEBUG("SetDlcContext %u\n", nAppID); PRINT_DEBUG("SetDlcContext %u\n", nAppID);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return true; return true;
} }

View File

@ -879,7 +879,7 @@ uint32 Steam_Client::GetIPCCallCount()
// callbacks will occur directly after the API function is called that generated the warning or message. // callbacks will occur directly after the API function is called that generated the warning or message.
void Steam_Client::SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction ) void Steam_Client::SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction )
{ {
PRINT_DEBUG("Steam_Client::SetWarningMessageHook\n"); PRINT_DEBUG("Steam_Client::SetWarningMessageHook, %p\n", pFunction);
} }
// Trigger global shutdown for the DLL // Trigger global shutdown for the DLL
@ -1103,7 +1103,8 @@ void Steam_Client::DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess( void (*)(
void Steam_Client::Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func ) void Steam_Client::Set_SteamAPI_CCheckCallbackRegisteredInProcess( SteamAPI_CheckCallbackRegistered_t func )
{ {
PRINT_DEBUG("Set_SteamAPI_CCheckCallbackRegisteredInProcess\n"); PRINT_DEBUG("Set_SteamAPI_CCheckCallbackRegisteredInProcess %p\n", func);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
} }
void Steam_Client::Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func ) void Steam_Client::Set_SteamAPI_CPostAPIResultInProcess( SteamAPI_PostAPIResultInProcess_t func )

View File

@ -187,7 +187,7 @@ void Steam_GameServer::LogOff()
// status functions // status functions
bool Steam_GameServer::BLoggedOn() bool Steam_GameServer::BLoggedOn()
{ {
PRINT_DEBUG("BLoggedOn\n"); PRINT_DEBUG("Steam_GameServer::BLoggedOn\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
return logged_in; return logged_in;
} }
@ -439,6 +439,7 @@ void Steam_GameServer::SendUserDisconnect( CSteamID steamIDUser )
bool Steam_GameServer::BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore ) bool Steam_GameServer::BUpdateUserData( CSteamID steamIDUser, const char *pchPlayerName, uint32 uScore )
{ {
PRINT_DEBUG("BUpdateUserData %llu %s %u\n", steamIDUser.ConvertToUint64(), pchPlayerName, uScore); PRINT_DEBUG("BUpdateUserData %llu %s %u\n", steamIDUser.ConvertToUint64(), pchPlayerName, uScore);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
auto player_it = std::find_if(players.begin(), players.end(), [&steamIDUser](std::pair<CSteamID, Gameserver_Player_Info_t>& player) auto player_it = std::find_if(players.begin(), players.end(), [&steamIDUser](std::pair<CSteamID, Gameserver_Player_Info_t>& player)
{ {
@ -610,6 +611,7 @@ void Steam_GameServer::CancelAuthTicket( HAuthTicket hAuthTicket )
EUserHasLicenseForAppResult Steam_GameServer::UserHasLicenseForApp( CSteamID steamID, AppId_t appID ) EUserHasLicenseForAppResult Steam_GameServer::UserHasLicenseForApp( CSteamID steamID, AppId_t appID )
{ {
PRINT_DEBUG("Steam_GameServer::UserHasLicenseForApp\n"); PRINT_DEBUG("Steam_GameServer::UserHasLicenseForApp\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return k_EUserHasLicenseResultHasLicense; return k_EUserHasLicenseResultHasLicense;
} }
@ -630,6 +632,7 @@ bool Steam_GameServer::RequestUserGroupStatus( CSteamID steamIDUser, CSteamID st
void Steam_GameServer::GetGameplayStats( ) void Steam_GameServer::GetGameplayStats( )
{ {
PRINT_DEBUG("GetGameplayStats\n"); PRINT_DEBUG("GetGameplayStats\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
} }
STEAM_CALL_RESULT( GSReputation_t ) STEAM_CALL_RESULT( GSReputation_t )

View File

@ -66,6 +66,7 @@ Steam_RemotePlay(class Settings *settings, class Networking *network, class Stea
uint32 GetSessionCount() uint32 GetSessionCount()
{ {
PRINT_DEBUG("Steam_RemotePlay::GetSessionCount\n"); PRINT_DEBUG("Steam_RemotePlay::GetSessionCount\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return 0; return 0;
} }
@ -73,6 +74,7 @@ uint32 GetSessionCount()
uint32 GetSessionID( int iSessionIndex ) uint32 GetSessionID( int iSessionIndex )
{ {
PRINT_DEBUG("Steam_RemotePlay::GetSessionID\n"); PRINT_DEBUG("Steam_RemotePlay::GetSessionID\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return 0; return 0;
} }
@ -80,6 +82,7 @@ uint32 GetSessionID( int iSessionIndex )
CSteamID GetSessionSteamID( uint32 unSessionID ) CSteamID GetSessionSteamID( uint32 unSessionID )
{ {
PRINT_DEBUG("Steam_RemotePlay::GetSessionSteamID\n"); PRINT_DEBUG("Steam_RemotePlay::GetSessionSteamID\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return k_steamIDNil; return k_steamIDNil;
} }
@ -88,6 +91,7 @@ CSteamID GetSessionSteamID( uint32 unSessionID )
const char *GetSessionClientName( uint32 unSessionID ) const char *GetSessionClientName( uint32 unSessionID )
{ {
PRINT_DEBUG("Steam_RemotePlay::GetSessionClientName\n"); PRINT_DEBUG("Steam_RemotePlay::GetSessionClientName\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return NULL; return NULL;
} }
@ -95,6 +99,7 @@ const char *GetSessionClientName( uint32 unSessionID )
ESteamDeviceFormFactor GetSessionClientFormFactor( uint32 unSessionID ) ESteamDeviceFormFactor GetSessionClientFormFactor( uint32 unSessionID )
{ {
PRINT_DEBUG("Steam_RemotePlay::GetSessionClientFormFactor\n"); PRINT_DEBUG("Steam_RemotePlay::GetSessionClientFormFactor\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return k_ESteamDeviceFormFactorUnknown; return k_ESteamDeviceFormFactorUnknown;
} }
@ -112,6 +117,7 @@ bool BGetSessionClientResolution( uint32 unSessionID, int *pnResolutionX, int *p
bool BStartRemotePlayTogether( bool bShowOverlay ) bool BStartRemotePlayTogether( bool bShowOverlay )
{ {
PRINT_DEBUG("Steam_RemotePlay::BStartRemotePlayTogether: %d\n", (int)bShowOverlay); PRINT_DEBUG("Steam_RemotePlay::BStartRemotePlayTogether: %d\n", (int)bShowOverlay);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -120,6 +126,7 @@ bool BStartRemotePlayTogether( bool bShowOverlay )
bool BSendRemotePlayTogetherInvite( CSteamID steamIDFriend ) bool BSendRemotePlayTogetherInvite( CSteamID steamIDFriend )
{ {
PRINT_DEBUG("Steam_RemotePlay::BSendRemotePlayTogetherInvite\n"); PRINT_DEBUG("Steam_RemotePlay::BSendRemotePlayTogetherInvite\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }

View File

@ -77,7 +77,7 @@ HSteamUser GetHSteamUser()
// The Steam client will automatically be trying to recreate the connection as often as possible. // The Steam client will automatically be trying to recreate the connection as often as possible.
bool BLoggedOn() bool BLoggedOn()
{ {
PRINT_DEBUG("BLoggedOn\n"); PRINT_DEBUG("Steam_User::BLoggedOn\n");
return !settings->is_offline(); return !settings->is_offline();
} }

View File

@ -296,10 +296,11 @@ bool RequestCurrentStats()
bool GetStat( const char *pchName, int32 *pData ) bool GetStat( const char *pchName, int32 *pData )
{ {
PRINT_DEBUG("GetStat int32 %s\n", pchName); PRINT_DEBUG("GetStat int32 %s\n", pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!pchName || !pData) return false; if (!pchName || !pData) return false;
std::string stat_name = ascii_to_lowercase(pchName); std::string stat_name = ascii_to_lowercase(pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
auto stats_config = settings->getStats(); auto stats_config = settings->getStats();
auto stats_data = stats_config.find(stat_name); auto stats_data = stats_config.find(stat_name);
if (stats_data != stats_config.end()) { if (stats_data != stats_config.end()) {
@ -332,10 +333,11 @@ bool GetStat( const char *pchName, int32 *pData )
bool GetStat( const char *pchName, float *pData ) bool GetStat( const char *pchName, float *pData )
{ {
PRINT_DEBUG("GetStat float %s\n", pchName); PRINT_DEBUG("GetStat float %s\n", pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!pchName || !pData) return false; if (!pchName || !pData) return false;
std::string stat_name = ascii_to_lowercase(pchName); std::string stat_name = ascii_to_lowercase(pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
auto stats_config = settings->getStats(); auto stats_config = settings->getStats();
auto stats_data = stats_config.find(stat_name); auto stats_data = stats_config.find(stat_name);
if (stats_data != stats_config.end()) { if (stats_data != stats_config.end()) {
@ -370,10 +372,11 @@ bool GetStat( const char *pchName, float *pData )
bool SetStat( const char *pchName, int32 nData ) bool SetStat( const char *pchName, int32 nData )
{ {
PRINT_DEBUG("SetStat int32 %s\n", pchName); PRINT_DEBUG("SetStat int32 %s\n", pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!pchName) return false; if (!pchName) return false;
std::string stat_name = ascii_to_lowercase(pchName); std::string stat_name = ascii_to_lowercase(pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
auto cached_stat = stats_cache_int.find(stat_name); auto cached_stat = stats_cache_int.find(stat_name);
if (cached_stat != stats_cache_int.end()) { if (cached_stat != stats_cache_int.end()) {
if (cached_stat->second == nData) return true; if (cached_stat->second == nData) return true;
@ -399,10 +402,11 @@ bool SetStat( const char *pchName, int32 nData )
bool SetStat( const char *pchName, float fData ) bool SetStat( const char *pchName, float fData )
{ {
PRINT_DEBUG("SetStat float %s\n", pchName); PRINT_DEBUG("SetStat float %s\n", pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!pchName) return false; if (!pchName) return false;
std::string stat_name = ascii_to_lowercase(pchName); std::string stat_name = ascii_to_lowercase(pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
auto cached_stat = stats_cache_float.find(stat_name); auto cached_stat = stats_cache_float.find(stat_name);
if (cached_stat != stats_cache_float.end()) { if (cached_stat != stats_cache_float.end()) {
if (cached_stat->second == fData) return true; if (cached_stat->second == fData) return true;
@ -428,11 +432,11 @@ bool SetStat( const char *pchName, float fData )
bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength ) bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dSessionLength )
{ {
PRINT_DEBUG("UpdateAvgRateStat %s\n", pchName); PRINT_DEBUG("UpdateAvgRateStat %s\n", pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!pchName) return false; if (!pchName) return false;
std::string stat_name = ascii_to_lowercase(pchName); std::string stat_name = ascii_to_lowercase(pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
char data[sizeof(float) + sizeof(float) + sizeof(double)]; char data[sizeof(float) + sizeof(float) + sizeof(double)];
int read_data = local_storage->get_data(Local_Storage::stats_storage_folder, stat_name, (char* )data, sizeof(*data)); int read_data = local_storage->get_data(Local_Storage::stats_storage_folder, stat_name, (char* )data, sizeof(*data));
float oldcount = 0; float oldcount = 0;
@ -463,9 +467,10 @@ bool UpdateAvgRateStat( const char *pchName, float flCountThisSession, double dS
bool GetAchievement( const char *pchName, bool *pbAchieved ) bool GetAchievement( const char *pchName, bool *pbAchieved )
{ {
PRINT_DEBUG("GetAchievement %s\n", pchName); PRINT_DEBUG("GetAchievement %s\n", pchName);
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
try { try {
auto it = defined_achievements_find(pchName); auto it = defined_achievements_find(pchName);
if (it == defined_achievements.end()) return false; if (it == defined_achievements.end()) return false;
@ -486,12 +491,12 @@ bool GetAchievement( const char *pchName, bool *pbAchieved )
bool SetAchievement( const char *pchName ) bool SetAchievement( const char *pchName )
{ {
PRINT_DEBUG("SetAchievement %s\n", pchName); PRINT_DEBUG("SetAchievement %s\n", pchName);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false; if (pchName == nullptr) return false;
if (settings->achievement_bypass) return true; if (settings->achievement_bypass) return true;
std::lock_guard<std::recursive_mutex> lock(global_mutex);
try { try {
auto it = defined_achievements_find(pchName); auto it = defined_achievements_find(pchName);
if (it == defined_achievements.end()) return false; if (it == defined_achievements.end()) return false;
@ -517,9 +522,10 @@ bool SetAchievement( const char *pchName )
bool ClearAchievement( const char *pchName ) bool ClearAchievement( const char *pchName )
{ {
PRINT_DEBUG("ClearAchievement %s\n", pchName); PRINT_DEBUG("ClearAchievement %s\n", pchName);
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
try { try {
auto it = defined_achievements_find(pchName); auto it = defined_achievements_find(pchName);
if (it == defined_achievements.end()) return false; if (it == defined_achievements.end()) return false;
@ -543,9 +549,10 @@ bool ClearAchievement( const char *pchName )
bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) bool GetAchievementAndUnlockTime( const char *pchName, bool *pbAchieved, uint32 *punUnlockTime )
{ {
PRINT_DEBUG("GetAchievementAndUnlockTime\n"); PRINT_DEBUG("GetAchievementAndUnlockTime\n");
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
try { try {
auto it = defined_achievements_find(pchName); auto it = defined_achievements_find(pchName);
if (it == defined_achievements.end()) return false; if (it == defined_achievements.end()) return false;
@ -594,16 +601,16 @@ bool StoreStats()
int GetAchievementIcon( const char *pchName ) int GetAchievementIcon( const char *pchName )
{ {
PRINT_DEBUG("GetAchievementIcon\n"); PRINT_DEBUG("GetAchievementIcon\n");
if (pchName == nullptr) return 0;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return 0;
return 0; return 0;
} }
std::string get_achievement_icon_name( const char *pchName, bool pbAchieved ) std::string get_achievement_icon_name( const char *pchName, bool pbAchieved )
{ {
if (pchName == nullptr) return "";
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return "";
try { try {
auto it = defined_achievements_find(pchName); auto it = defined_achievements_find(pchName);
@ -623,10 +630,11 @@ std::string get_achievement_icon_name( const char *pchName, bool pbAchieved )
const char * GetAchievementDisplayAttribute( const char *pchName, const char *pchKey ) const char * GetAchievementDisplayAttribute( const char *pchName, const char *pchKey )
{ {
PRINT_DEBUG("GetAchievementDisplayAttribute %s %s\n", pchName, pchKey); PRINT_DEBUG("GetAchievementDisplayAttribute %s %s\n", pchName, pchKey);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return ""; if (pchName == nullptr) return "";
if (pchKey == nullptr) return ""; if (pchKey == nullptr) return "";
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (strcmp (pchKey, "name") == 0) { if (strcmp (pchKey, "name") == 0) {
try { try {
@ -664,9 +672,10 @@ const char * GetAchievementDisplayAttribute( const char *pchName, const char *pc
bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress ) bool IndicateAchievementProgress( const char *pchName, uint32 nCurProgress, uint32 nMaxProgress )
{ {
PRINT_DEBUG("IndicateAchievementProgress %s\n", pchName); PRINT_DEBUG("IndicateAchievementProgress %s\n", pchName);
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
try { try {
auto it = defined_achievements_find(pchName); auto it = defined_achievements_find(pchName);
if (it == defined_achievements.end()) return false; if (it == defined_achievements.end()) return false;
@ -718,6 +727,7 @@ uint32 GetNumAchievements()
const char * GetAchievementName( uint32 iAchievement ) const char * GetAchievementName( uint32 iAchievement )
{ {
PRINT_DEBUG("GetAchievementName\n"); PRINT_DEBUG("GetAchievementName\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (iAchievement >= sorted_achievement_names.size()) { if (iAchievement >= sorted_achievement_names.size()) {
return ""; return "";
} }
@ -756,10 +766,10 @@ SteamAPICall_t RequestUserStats( CSteamID steamIDUser )
bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData ) bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData )
{ {
PRINT_DEBUG("GetUserStat %s %llu\n", pchName, steamIDUser.ConvertToUint64()); PRINT_DEBUG("GetUserStat %s %llu\n", pchName, steamIDUser.ConvertToUint64());
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
if (steamIDUser == settings->get_local_steam_id()) { if (steamIDUser == settings->get_local_steam_id()) {
GetStat(pchName, pData); GetStat(pchName, pData);
} else { } else {
@ -772,10 +782,10 @@ bool GetUserStat( CSteamID steamIDUser, const char *pchName, int32 *pData )
bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData ) bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData )
{ {
PRINT_DEBUG("GetUserStat %s %llu\n", pchName, steamIDUser.ConvertToUint64()); PRINT_DEBUG("GetUserStat %s %llu\n", pchName, steamIDUser.ConvertToUint64());
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
if (steamIDUser == settings->get_local_steam_id()) { if (steamIDUser == settings->get_local_steam_id()) {
GetStat(pchName, pData); GetStat(pchName, pData);
} else { } else {
@ -788,8 +798,9 @@ bool GetUserStat( CSteamID steamIDUser, const char *pchName, float *pData )
bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved ) bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchieved )
{ {
PRINT_DEBUG("GetUserAchievement %s\n", pchName); PRINT_DEBUG("GetUserAchievement %s\n", pchName);
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
if (steamIDUser == settings->get_local_steam_id()) { if (steamIDUser == settings->get_local_steam_id()) {
return GetAchievement(pchName, pbAchieved); return GetAchievement(pchName, pbAchieved);
@ -802,9 +813,10 @@ bool GetUserAchievement( CSteamID steamIDUser, const char *pchName, bool *pbAchi
bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime ) bool GetUserAchievementAndUnlockTime( CSteamID steamIDUser, const char *pchName, bool *pbAchieved, uint32 *punUnlockTime )
{ {
PRINT_DEBUG("GetUserAchievementAndUnlockTime %s\n", pchName); PRINT_DEBUG("GetUserAchievementAndUnlockTime %s\n", pchName);
if (pchName == nullptr) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (pchName == nullptr) return false;
if (steamIDUser == settings->get_local_steam_id()) { if (steamIDUser == settings->get_local_steam_id()) {
return GetAchievementAndUnlockTime(pchName, pbAchieved, punUnlockTime); return GetAchievementAndUnlockTime(pchName, pbAchieved, punUnlockTime);
} }
@ -965,7 +977,7 @@ SteamAPICall_t DownloadLeaderboardEntries( SteamLeaderboard_t hSteamLeaderboard,
// if a user doesn't have a leaderboard entry, they won't be included in the result // if a user doesn't have a leaderboard entry, they won't be included in the result
// a max of 100 users can be downloaded at a time, with only one outstanding call at a time // a max of 100 users can be downloaded at a time, with only one outstanding call at a time
STEAM_METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers) STEAM_METHOD_DESC(Downloads leaderboard entries for an arbitrary set of users - ELeaderboardDataRequest is k_ELeaderboardDataRequestUsers)
STEAM_CALL_RESULT( LeaderboardScoresDownloaded_t ) STEAM_CALL_RESULT( LeaderboardScoresDownloaded_t )
SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard, SteamAPICall_t DownloadLeaderboardEntriesForUsers( SteamLeaderboard_t hSteamLeaderboard,
STEAM_ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers ) STEAM_ARRAY_COUNT_D(cUsers, Array of users to retrieve) CSteamID *prgUsers, int cUsers )
{ {

View File

@ -89,9 +89,10 @@ const char *GetIPCountry()
bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight ) bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight )
{ {
PRINT_DEBUG("GetImageSize %i\n", iImage); PRINT_DEBUG("GetImageSize %i\n", iImage);
if (!iImage || !pnWidth || !pnHeight) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!iImage || !pnWidth || !pnHeight) return false;
auto image = settings->images.find(iImage); auto image = settings->images.find(iImage);
if (image == settings->images.end()) return false; if (image == settings->images.end()) return false;
@ -106,9 +107,10 @@ bool GetImageSize( int iImage, uint32 *pnWidth, uint32 *pnHeight )
bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize )
{ {
PRINT_DEBUG("GetImageRGBA %i\n", iImage); PRINT_DEBUG("GetImageRGBA %i\n", iImage);
if (!iImage || !pubDest || !nDestBufferSize) return false;
std::lock_guard<std::recursive_mutex> lock(global_mutex); std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!iImage || !pubDest || !nDestBufferSize) return false;
auto image = settings->images.find(iImage); auto image = settings->images.find(iImage);
if (image == settings->images.end()) return false; if (image == settings->images.end()) return false;
@ -138,6 +140,7 @@ uint8 GetCurrentBatteryPower()
uint32 GetAppID() uint32 GetAppID()
{ {
PRINT_DEBUG("GetAppID\n"); PRINT_DEBUG("GetAppID\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return settings->get_local_game_id().AppID(); return settings->get_local_game_id().AppID();
} }
@ -147,6 +150,7 @@ uint32 GetAppID()
void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition ) void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition )
{ {
PRINT_DEBUG("SetOverlayNotificationPosition\n"); PRINT_DEBUG("SetOverlayNotificationPosition\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
overlay->SetNotificationPosition(eNotificationPosition); overlay->SetNotificationPosition(eNotificationPosition);
} }
@ -156,12 +160,12 @@ void SetOverlayNotificationPosition( ENotificationPosition eNotificationPosition
bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed ) bool IsAPICallCompleted( SteamAPICall_t hSteamAPICall, bool *pbFailed )
{ {
PRINT_DEBUG("IsAPICallCompleted: %llu\n", hSteamAPICall); PRINT_DEBUG("IsAPICallCompleted: %llu\n", hSteamAPICall);
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (hSteamAPICall == 1) { //bug ? soul calibur 6 calls this function with the return value 1 of Steam_User_Stats::RequestCurrentStats and expects this function to return true if (hSteamAPICall == 1) { //bug ? soul calibur 6 calls this function with the return value 1 of Steam_User_Stats::RequestCurrentStats and expects this function to return true
if (pbFailed) *pbFailed = true; if (pbFailed) *pbFailed = true;
return true; return true;
} }
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!callback_results->exists(hSteamAPICall)) return false; if (!callback_results->exists(hSteamAPICall)) return false;
if (pbFailed) *pbFailed = false; if (pbFailed) *pbFailed = false;
return true; //all api calls "complete" right away return true; //all api calls "complete" right away
@ -222,6 +226,7 @@ void SetWarningMessageHook( SteamAPIWarningMessageHook_t pFunction )
bool IsOverlayEnabled() bool IsOverlayEnabled()
{ {
PRINT_DEBUG("IsOverlayEnabled\n"); PRINT_DEBUG("IsOverlayEnabled\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return overlay->Ready(); return overlay->Ready();
} }
@ -238,6 +243,7 @@ bool IsOverlayEnabled()
bool BOverlayNeedsPresent() bool BOverlayNeedsPresent()
{ {
PRINT_DEBUG("BOverlayNeedsPresent\n"); PRINT_DEBUG("BOverlayNeedsPresent\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return overlay->NeedPresent(); return overlay->NeedPresent();
} }
@ -271,6 +277,7 @@ bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLi
bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax ) bool ShowGamepadTextInput( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, const char *pchDescription, uint32 unCharMax )
{ {
PRINT_DEBUG("ShowGamepadTextInput old\n"); PRINT_DEBUG("ShowGamepadTextInput old\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return ShowGamepadTextInput(eInputMode, eLineInputMode, pchDescription, unCharMax, NULL); return ShowGamepadTextInput(eInputMode, eLineInputMode, pchDescription, unCharMax, NULL);
} }
@ -292,6 +299,7 @@ bool GetEnteredGamepadTextInput( char *pchText, uint32 cchText )
const char *GetSteamUILanguage() const char *GetSteamUILanguage()
{ {
PRINT_DEBUG("GetSteamUILanguage\n"); PRINT_DEBUG("GetSteamUILanguage\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return settings->get_language(); return settings->get_language();
} }
@ -300,6 +308,7 @@ const char *GetSteamUILanguage()
bool IsSteamRunningInVR() bool IsSteamRunningInVR()
{ {
PRINT_DEBUG("IsSteamRunningInVR\n"); PRINT_DEBUG("IsSteamRunningInVR\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -308,6 +317,7 @@ bool IsSteamRunningInVR()
void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset ) void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset )
{ {
PRINT_DEBUG("SetOverlayNotificationInset\n"); PRINT_DEBUG("SetOverlayNotificationInset\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
overlay->SetNotificationInset(nHorizontalInset, nVerticalInset); overlay->SetNotificationInset(nHorizontalInset, nVerticalInset);
} }
@ -318,6 +328,7 @@ void SetOverlayNotificationInset( int nHorizontalInset, int nVerticalInset )
bool IsSteamInBigPictureMode() bool IsSteamInBigPictureMode()
{ {
PRINT_DEBUG("IsSteamInBigPictureMode\n"); PRINT_DEBUG("IsSteamInBigPictureMode\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -333,6 +344,7 @@ void StartVRDashboard()
bool IsVRHeadsetStreamingEnabled() bool IsVRHeadsetStreamingEnabled()
{ {
PRINT_DEBUG("IsVRHeadsetStreamingEnabled\n"); PRINT_DEBUG("IsVRHeadsetStreamingEnabled\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -351,6 +363,7 @@ void SetVRHeadsetStreamingEnabled( bool bEnabled )
bool IsSteamChinaLauncher() bool IsSteamChinaLauncher()
{ {
PRINT_DEBUG("IsSteamChinaLauncher\n"); PRINT_DEBUG("IsSteamChinaLauncher\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -359,6 +372,7 @@ bool IsSteamChinaLauncher()
bool InitFilterText() bool InitFilterText()
{ {
PRINT_DEBUG("InitFilterText old\n"); PRINT_DEBUG("InitFilterText old\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -368,6 +382,7 @@ bool InitFilterText()
bool InitFilterText( uint32 unFilterOptions ) bool InitFilterText( uint32 unFilterOptions )
{ {
PRINT_DEBUG("InitFilterText\n"); PRINT_DEBUG("InitFilterText\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return false; return false;
} }
@ -380,6 +395,7 @@ bool InitFilterText( uint32 unFilterOptions )
int FilterText( char* pchOutFilteredText, uint32 nByteSizeOutFilteredText, const char * pchInputMessage, bool bLegalOnly ) int FilterText( char* pchOutFilteredText, uint32 nByteSizeOutFilteredText, const char * pchInputMessage, bool bLegalOnly )
{ {
PRINT_DEBUG("FilterText old\n"); PRINT_DEBUG("FilterText old\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return FilterText(k_ETextFilteringContextUnknown, CSteamID(), pchInputMessage, pchOutFilteredText, nByteSizeOutFilteredText ); return FilterText(k_ETextFilteringContextUnknown, CSteamID(), pchInputMessage, pchOutFilteredText, nByteSizeOutFilteredText );
} }
@ -393,6 +409,7 @@ int FilterText( char* pchOutFilteredText, uint32 nByteSizeOutFilteredText, const
int FilterText( ETextFilteringContext eContext, CSteamID sourceSteamID, const char *pchInputMessage, char *pchOutFilteredText, uint32 nByteSizeOutFilteredText ) int FilterText( ETextFilteringContext eContext, CSteamID sourceSteamID, const char *pchInputMessage, char *pchOutFilteredText, uint32 nByteSizeOutFilteredText )
{ {
PRINT_DEBUG("FilterText\n"); PRINT_DEBUG("FilterText\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
if (!nByteSizeOutFilteredText) return 0; if (!nByteSizeOutFilteredText) return 0;
unsigned len = strlen(pchInputMessage); unsigned len = strlen(pchInputMessage);
if (!len) return 0; if (!len) return 0;
@ -411,6 +428,7 @@ int FilterText( ETextFilteringContext eContext, CSteamID sourceSteamID, const ch
ESteamIPv6ConnectivityState GetIPv6ConnectivityState( ESteamIPv6ConnectivityProtocol eProtocol ) ESteamIPv6ConnectivityState GetIPv6ConnectivityState( ESteamIPv6ConnectivityProtocol eProtocol )
{ {
PRINT_DEBUG("GetIPv6ConnectivityState\n"); PRINT_DEBUG("GetIPv6ConnectivityState\n");
std::lock_guard<std::recursive_mutex> lock(global_mutex);
return k_ESteamIPv6ConnectivityState_Unknown; return k_ESteamIPv6ConnectivityState_Unknown;
} }

View File

@ -210,6 +210,8 @@ void Steam_Overlay::SetupOverlay()
void Steam_Overlay::UnSetupOverlay() void Steam_Overlay::UnSetupOverlay()
{ {
PRINT_DEBUG("%s\n", __FUNCTION__);
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
ingame_overlay::StopRendererDetection(); ingame_overlay::StopRendererDetection();
if (!Ready() && future_renderer.valid()) { if (!Ready() && future_renderer.valid()) {
if (future_renderer.wait_for(std::chrono::milliseconds{500}) == std::future_status::ready) { if (future_renderer.wait_for(std::chrono::milliseconds{500}) == std::future_status::ready) {
@ -358,10 +360,10 @@ void Steam_Overlay::NotifyUserAchievement()
void Steam_Overlay::SetLobbyInvite(Friend friendId, uint64 lobbyId) void Steam_Overlay::SetLobbyInvite(Friend friendId, uint64 lobbyId)
{ {
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
if (!Ready()) if (!Ready())
return; return;
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
auto i = friends.find(friendId); auto i = friends.find(friendId);
if (i != friends.end()) if (i != friends.end())
{ {
@ -377,10 +379,10 @@ void Steam_Overlay::SetLobbyInvite(Friend friendId, uint64 lobbyId)
void Steam_Overlay::SetRichInvite(Friend friendId, const char* connect_str) void Steam_Overlay::SetRichInvite(Friend friendId, const char* connect_str)
{ {
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
if (!Ready()) if (!Ready())
return; return;
std::lock_guard<std::recursive_mutex> lock(overlay_mutex);
auto i = friends.find(friendId); auto i = friends.find(friendId);
if (i != friends.end()) if (i != friends.end())
{ {
@ -421,8 +423,8 @@ void Steam_Overlay::FriendDisconnect(Friend _friend)
void Steam_Overlay::AddMessageNotification(std::string const& message) void Steam_Overlay::AddMessageNotification(std::string const& message)
{ {
if (settings->disable_overlay_friend_notification) return;
std::lock_guard<std::recursive_mutex> lock(notifications_mutex); std::lock_guard<std::recursive_mutex> lock(notifications_mutex);
if (settings->disable_overlay_friend_notification) return;
int id = find_free_notification_id(notifications); int id = find_free_notification_id(notifications);
if (id != 0) if (id != 0)
{ {
@ -487,8 +489,8 @@ void Steam_Overlay::AddAchievementNotification(nlohmann::json const& ach)
void Steam_Overlay::AddInviteNotification(std::pair<const Friend, friend_window_state>& wnd_state) void Steam_Overlay::AddInviteNotification(std::pair<const Friend, friend_window_state>& wnd_state)
{ {
if (settings->disable_overlay_friend_notification) return;
std::lock_guard<std::recursive_mutex> lock(notifications_mutex); std::lock_guard<std::recursive_mutex> lock(notifications_mutex);
if (settings->disable_overlay_friend_notification) return;
int id = find_free_notification_id(notifications); int id = find_free_notification_id(notifications);
if (id != 0) if (id != 0)
{ {