kevent: fix race on process exit event

This commit is contained in:
DH 2024-08-31 23:59:28 +03:00
parent d0d22529f9
commit b0b0226064
3 changed files with 7 additions and 0 deletions

View file

@ -65,6 +65,7 @@ struct Process final {
sint budgetId{1};
bool isInSandbox = false;
EventEmitter event;
std::optional<sint> exitStatus;
std::uint32_t sdkVersion = -1;
std::uint64_t nextTlsSlot = 1;

View file

@ -96,6 +96,11 @@ 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()) {
note.event.data = *process->exitStatus;
note.triggered = true;
kq->cv.notify_all(kq->mtx);
}
} else if (change.filter == kEvFiltRead ||
change.filter == kEvFiltWrite) {
auto fd = thread->tproc->fileDescriptors.get(change.ident);