bsd: Fix eventfd broken logic (#3647)
* bsd: Fix eventfd broken logic This commit fix eventfd logic being broken. The following changes were made: - EventFd IPC definition had argument inverted - EventFd events weren't fired correctly - Poll logic was wrong and unfinished for eventfd - Reintroduce workaround from #3385 but in a safer way, and spawn 4 threads. * ipc: Rework a bit for multithreads * Clean up debug logs * Make server thread yield when managed lock isn't availaible * Fix replyTargetHandle not being added in the proper locking scope * Simplify some scopes * Address gdkchan's comments * Revert IPC workaround for now * Reintroduce the EventFileDescriptor workaround
This commit is contained in:
parent
18b61aff59
commit
1865ea87e5
3 changed files with 60 additions and 17 deletions
|
@ -315,6 +315,11 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
}
|
||||
}
|
||||
|
||||
if (updateCount > 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// If we are here, that mean nothing was availaible, sleep for 50ms
|
||||
context.Device.System.KernelContext.Syscall.SleepThread(50 * 1000000);
|
||||
}
|
||||
|
@ -972,11 +977,12 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
|
|||
}
|
||||
|
||||
[CommandHipc(31)] // 7.0.0+
|
||||
// EventFd(u64 initval, nn::socket::EventFdFlags flags) -> (i32 ret, u32 bsd_errno)
|
||||
// EventFd(nn::socket::EventFdFlags flags, u64 initval) -> (i32 ret, u32 bsd_errno)
|
||||
public ResultCode EventFd(ServiceCtx context)
|
||||
{
|
||||
ulong initialValue = context.RequestData.ReadUInt64();
|
||||
EventFdFlags flags = (EventFdFlags)context.RequestData.ReadUInt32();
|
||||
context.RequestData.BaseStream.Position += 4; // Padding
|
||||
ulong initialValue = context.RequestData.ReadUInt64();
|
||||
|
||||
EventFileDescriptor newEventFile = new EventFileDescriptor(initialValue, flags);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue