Fix an endge case in bsd IClient::Poll implementation

This add some code to handle usage of poll without any fds.

This is required by Dark Souls Remastered main loop logic as it's
calling it without any fds during initialization.

===
General system stability improvements to enhance the user's experience.
This commit is contained in:
Thog 2019-12-22 17:48:01 +01:00
parent bd010869a5
commit d663174570
No known key found for this signature in database
GPG key ID: 0CD291558FAFDBC6

View file

@ -1,11 +1,12 @@
using Ryujinx.Common;
using Ryujinx.Common.Logging;
using Ryujinx.Common.Logging;
using Ryujinx.HLE.Utilities;
using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
{
@ -379,13 +380,26 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd
}
}
try
if (fdsCount != 0)
{
System.Net.Sockets.Socket.Select(readEvents, writeEvents, errorEvents, timeout);
try
{
System.Net.Sockets.Socket.Select(readEvents, writeEvents, errorEvents, timeout);
}
catch (SocketException exception)
{
return WriteWinSock2Error(context, (WsaError)exception.ErrorCode);
}
}
catch (SocketException exception)
else if (timeout == -1)
{
return WriteWinSock2Error(context, (WsaError)exception.ErrorCode);
// FIXME: If we get a timeout of -1 and there is no fds to wait on, this should kill the KProces. (need to check that with re)
throw new InvalidOperationException();
}
else
{
// FIXME: We should make the KThread sleep but we can't do much about it yet.
Thread.Sleep(timeout);
}
for (int i = 0; i < fdsCount; i++)