Skip to content

Commit 65bd6e9

Browse files
committed
Added check for deadlock in CSteamNetworkingSockets::ReceivedP2PCustomSignal
1 parent a64c185 commit 65bd6e9

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

src/steamnetworkingsockets/clientlib/steamnetworkingsockets_p2p.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2825,7 +2825,24 @@ bool CSteamNetworkingSockets::ReceivedP2PCustomSignal( const void *pMsg, int cbM
28252825
return false;
28262826
}
28272827

2828-
SteamNetworkingGlobalLock scopeLock( "ReceivedP2PCustomSignal" );
2828+
constexpr SteamNetworkingMicroseconds k_usecWarnEvery = 100*1000;
2829+
const char *pszLockTag = "ReceivedP2PCustomSignal";
2830+
SteamNetworkingMicroseconds usecWaitStart = SteamNetworkingSockets_GetLocalTimestamp();
2831+
SteamNetworkingMicroseconds usecNextWarn = usecWaitStart + k_usecWarnEvery;
2832+
while ( !SteamNetworkingGlobalLock::TryLock( pszLockTag, 10 ) )
2833+
{
2834+
SteamNetworkingMicroseconds usecNow = SteamNetworkingSockets_GetLocalTimestamp();
2835+
if ( usecNow >= usecNextWarn )
2836+
{
2837+
const char *pszFromIdentity = msg.has_from_identity() ? msg.from_identity().c_str() : "?";
2838+
const uint32 nFromConnectionID = msg.has_from_connection_id() ? msg.from_connection_id() : 0;
2839+
SpewWarning( "Waited %.1fms for global lock in %s (from=%s from_cxn=%u)\n",
2840+
( usecNow - usecWaitStart )*1e-3, pszLockTag, pszFromIdentity, nFromConnectionID );
2841+
usecNextWarn = usecNow + k_usecWarnEvery;
2842+
}
2843+
}
2844+
RunCodeAtScopeExit( SteamNetworkingGlobalLock::Unlock() );
2845+
28292846
return InternalReceivedP2PSignal( msg, pContext, false );
28302847
}
28312848

0 commit comments

Comments
 (0)