Fixing race condition in GetSessionInfo (#14131)

This commit is contained in:
Mohammed Alhaddar 2025-06-06 15:55:05 +03:00 committed by GitHub
parent 9ab22e9f8b
commit 97f9d0c7e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -508,13 +508,11 @@ namespace Emby.Server.Implementations.Session
ArgumentException.ThrowIfNullOrEmpty(deviceId);
var key = GetSessionKey(appName, deviceId);
CheckDisposed();
if (!_activeConnections.TryGetValue(key, out var sessionInfo))
SessionInfo newSession = CreateSessionInfo(key, appName, appVersion, deviceId, deviceName, remoteEndPoint, user);
SessionInfo sessionInfo = _activeConnections.GetOrAdd(key, newSession);
if (ReferenceEquals(newSession, sessionInfo))
{
sessionInfo = CreateSession(key, appName, appVersion, deviceId, deviceName, remoteEndPoint, user);
_activeConnections[key] = sessionInfo;
OnSessionStarted(newSession);
}
sessionInfo.UserId = user?.Id ?? Guid.Empty;
@ -538,7 +536,7 @@ namespace Emby.Server.Implementations.Session
return sessionInfo;
}
private SessionInfo CreateSession(
private SessionInfo CreateSessionInfo(
string key,
string appName,
string appVersion,
@ -582,7 +580,6 @@ namespace Emby.Server.Implementations.Session
sessionInfo.HasCustomDeviceName = true;
}
OnSessionStarted(sessionInfo);
return sessionInfo;
}