forked from Mirror/Ryujinx
Fix race in SM initialization (#2280)
This commit is contained in:
parent
ebdbaa6db0
commit
a8022ca3a1
2 changed files with 4 additions and 3 deletions
|
@ -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.
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
Reference in a new issue