Fix race in SM initialization (#2280)

This commit is contained in:
gdkchan 2021-05-11 19:57:21 -03:00 committed by GitHub
parent ebdbaa6db0
commit a8022ca3a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 3 deletions

View File

@ -274,7 +274,7 @@ namespace Ryujinx.HLE.HOS
public void InitializeServices() public void InitializeServices()
{ {
IUserInterface sm = new IUserInterface(KernelContext); IUserInterface sm = new IUserInterface(KernelContext);
sm.TrySetServer(new ServerBase(KernelContext, "SmServer") { SmObjectFactory = () => new IUserInterface(KernelContext) }); sm.TrySetServer(new ServerBase(KernelContext, "SmServer", () => new IUserInterface(KernelContext)));
// Wait until SM server thread is done with initialization, // Wait until SM server thread is done with initialization,
// only then doing connections to SM is safe. // only then doing connections to SM is safe.

View File

@ -38,13 +38,14 @@ namespace Ryujinx.HLE.HOS.Services
private readonly Dictionary<int, Func<IpcService>> _ports = new Dictionary<int, Func<IpcService>>(); private readonly Dictionary<int, Func<IpcService>> _ports = new Dictionary<int, Func<IpcService>>();
public ManualResetEvent InitDone { get; } public ManualResetEvent InitDone { get; }
public Func<IpcService> SmObjectFactory { get; set; } public Func<IpcService> SmObjectFactory { get; }
public string Name { get; } public string Name { get; }
public ServerBase(KernelContext context, string name) public ServerBase(KernelContext context, string name, Func<IpcService> smObjectFactory = null)
{ {
InitDone = new ManualResetEvent(false); InitDone = new ManualResetEvent(false);
Name = name; Name = name;
SmObjectFactory = smObjectFactory;
_context = context; _context = context;
const ProcessCreationFlags flags = const ProcessCreationFlags flags =