@@ -346,7 +346,6 @@ CSteamNetworkPollGroup::~CSteamNetworkPollGroup()
346346 // Object deletion is rare; to keep things simple we require the global lock
347347 SteamNetworkingGlobalLock::AssertHeldByCurrentThread ();
348348 m_lock.AssertHeldByCurrentThread ();
349- g_tables_lock.AssertHeldByCurrentThread ();
350349
351350 FOR_EACH_VEC_BACK ( m_vecConnections, i )
352351 {
@@ -385,6 +384,7 @@ CSteamNetworkPollGroup::~CSteamNetworkPollGroup()
385384 // Remove us from global table, if we're in it
386385 if ( m_hPollGroupSelf != k_HSteamNetPollGroup_Invalid )
387386 {
387+ g_tables_lock.AssertHeldByCurrentThread ();
388388 int idx = m_hPollGroupSelf & 0xffff ;
389389 if ( g_mapPollGroups.IsValidIndex ( idx ) && g_mapPollGroups[ idx ] == this )
390390 {
@@ -443,9 +443,6 @@ void CSteamNetworkPollGroup::AssignHandleAndAddToGlobalTable()
443443CSteamNetworkListenSocketBase::CSteamNetworkListenSocketBase ( CSteamNetworkingSockets *pSteamNetworkingSocketsInterface )
444444: m_pSteamNetworkingSocketsInterface( pSteamNetworkingSocketsInterface )
445445, m_hListenSocketSelf( k_HSteamListenSocket_Invalid )
446- #ifdef STEAMNETWORKINGSOCKETS_STEAMCLIENT
447- , m_legacyPollGroup( pSteamNetworkingSocketsInterface )
448- #endif
449446{
450447 m_connectionConfig.Init ( &pSteamNetworkingSocketsInterface->m_connectionConfig );
451448}
@@ -473,6 +470,10 @@ CSteamNetworkListenSocketBase::~CSteamNetworkListenSocketBase()
473470
474471 m_hListenSocketSelf = k_HSteamListenSocket_Invalid;
475472 }
473+
474+ #ifdef STEAMNETWORKINGSOCKETS_STEAMCLIENT
475+ Assert ( !m_pLegacyPollGroup ); // Should have been cleaned up by Destroy()
476+ #endif
476477}
477478
478479bool CSteamNetworkListenSocketBase::BInitListenSocketCommon ( int nOptions, const SteamNetworkingConfigValue_t *pOptions, SteamDatagramErrMsg &errMsg )
@@ -556,6 +557,14 @@ void CSteamNetworkListenSocketBase::Destroy()
556557 Assert ( m_mapChildConnections.Count () == n-1 );
557558 }
558559
560+ #ifdef STEAMNETWORKINGSOCKETS_STEAMCLIENT
561+ if ( m_pLegacyPollGroup )
562+ {
563+ m_pLegacyPollGroup->m_lock .lock (); // Don't use scope object. It will unlock when we destruct
564+ m_pLegacyPollGroup.reset ();
565+ }
566+ #endif
567+
559568 // Self destruct
560569 delete this ;
561570}
@@ -615,7 +624,11 @@ bool CSteamNetworkListenSocketBase::BAddChildConnection( CSteamNetworkConnection
615624 // Don't override it, if so.)
616625 #ifdef STEAMNETWORKINGSOCKETS_STEAMCLIENT
617626 if ( !pConn->m_pPollGroup )
618- pConn->SetPollGroup ( &m_legacyPollGroup );
627+ {
628+ if ( !m_pLegacyPollGroup )
629+ m_pLegacyPollGroup.reset ( new CSteamNetworkPollGroup ( m_pSteamNetworkingSocketsInterface ) );
630+ pConn->SetPollGroup ( m_pLegacyPollGroup.get () );
631+ }
619632 #endif
620633
621634 return true ;
0 commit comments