Allow concurrent BSD EventFd read/write (#3385)
This commit is contained in:
parent
830cbf91bb
commit
70895bdb04
5 changed files with 55 additions and 14 deletions
|
@ -8,7 +8,6 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
{
|
||||
private ulong _value;
|
||||
private readonly EventFdFlags _flags;
|
||||
private AutoResetEvent _event;
|
||||
|
||||
private object _lock = new object();
|
||||
|
||||
|
@ -21,7 +20,6 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
{
|
||||
_value = value;
|
||||
_flags = flags;
|
||||
_event = new AutoResetEvent(false);
|
||||
|
||||
WriteEvent = new ManualResetEvent(true);
|
||||
ReadEvent = new ManualResetEvent(true);
|
||||
|
@ -31,7 +29,6 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
_event.Dispose();
|
||||
WriteEvent.Dispose();
|
||||
ReadEvent.Dispose();
|
||||
}
|
||||
|
@ -57,7 +54,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
{
|
||||
while (_value == 0)
|
||||
{
|
||||
_event.WaitOne();
|
||||
Monitor.Wait(_lock);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -106,7 +103,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
{
|
||||
if (Blocking)
|
||||
{
|
||||
_event.WaitOne();
|
||||
Monitor.Wait(_lock);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -119,7 +116,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
writeSize = sizeof(ulong);
|
||||
|
||||
_value += count;
|
||||
_event.Set();
|
||||
Monitor.Pulse(_lock);
|
||||
|
||||
WriteEvent.Set();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue