mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-02-22 07:35:37 +01:00
kevent: do not wakeup on empty kqueue
This commit is contained in:
parent
eacd758dae
commit
a6f2effc8a
|
|
@ -96,7 +96,8 @@ static SysResult keventChange(KQueue *kq, KEvent &change, Thread *thread) {
|
|||
std::unique_lock lock(process->event.mutex);
|
||||
process->event.notes.insert(&*nodeIt);
|
||||
nodeIt->linked = process;
|
||||
if ((change.fflags & orbis::kNoteExit) != 0 && process->exitStatus.has_value()) {
|
||||
if ((change.fflags & orbis::kNoteExit) != 0 &&
|
||||
process->exitStatus.has_value()) {
|
||||
note.event.data = *process->exitStatus;
|
||||
note.triggered = true;
|
||||
kq->cv.notify_all(kq->mtx);
|
||||
|
|
@ -173,7 +174,7 @@ static SysResult keventChange(KQueue *kq, KEvent &change, Thread *thread) {
|
|||
}
|
||||
} else if (change.filter == kEvFiltGraphicsCore) {
|
||||
nodeIt->triggered = true;
|
||||
|
||||
|
||||
if (change.ident == 0x84) {
|
||||
// clock change event
|
||||
nodeIt->event.data |= 1000ull << 16; // clock
|
||||
|
|
@ -265,19 +266,6 @@ orbis::SysResult orbis::sys_kevent(Thread *thread, sint fd,
|
|||
|
||||
ErrorCode errorCode{};
|
||||
|
||||
if (kq->notes.empty()) {
|
||||
// ORBIS_LOG_ERROR(__FUNCTION__, "attempt to wait empty kqueue", fd,
|
||||
// nevents,
|
||||
// timeoutPoint.time_since_epoch().count());
|
||||
// thread->where();
|
||||
|
||||
// return{};
|
||||
// std::abort();
|
||||
return {};
|
||||
}
|
||||
|
||||
// ORBIS_LOG_TODO(__FUNCTION__, "kevent wait", fd);
|
||||
|
||||
while (true) {
|
||||
bool waitHack = false;
|
||||
bool canSleep = true;
|
||||
|
|
@ -296,7 +284,7 @@ orbis::SysResult orbis::sys_kevent(Thread *thread, sint fd,
|
|||
|
||||
if (!note.triggered) {
|
||||
if (note.event.filter == kEvFiltRead) {
|
||||
if (note.file->hostFd >= 0 ) {
|
||||
if (note.file->hostFd >= 0) {
|
||||
if (isReadEventTriggered(note.file->hostFd)) {
|
||||
note.triggered = true;
|
||||
} else {
|
||||
|
|
@ -330,7 +318,8 @@ orbis::SysResult orbis::sys_kevent(Thread *thread, sint fd,
|
|||
erase = true;
|
||||
}
|
||||
|
||||
if (note.event.filter == kEvFiltRead || note.event.filter == kEvFiltWrite) {
|
||||
if (note.event.filter == kEvFiltRead ||
|
||||
note.event.filter == kEvFiltWrite) {
|
||||
note.triggered = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -351,7 +340,6 @@ orbis::SysResult orbis::sys_kevent(Thread *thread, sint fd,
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
if (timeoutPoint != clock::time_point::max()) {
|
||||
std::lock_guard lock(kq->mtx);
|
||||
auto now = clock::now();
|
||||
|
|
|
|||
Loading…
Reference in a new issue