futex: misc fixes

This commit is contained in:
Matheus
2026-06-04 11:38:49 -03:00
parent b05d99b630
commit 59e4cc9fbf
+9 -3
View File
@@ -103,10 +103,13 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value
ret.errno = ENOMEM; ret.errno = ENOMEM;
break; break;
} }
POLL_INITHEADER(&futex->pollheader);
ret.errno = setfutex(futex, physical); ret.errno = setfutex(futex, physical);
if (ret.errno) if (ret.errno) {
free(futex);
break; break;
}
} }
++futex->waiting; ++futex->waiting;
@@ -127,6 +130,8 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value
} else if (futex->waking == 0) { } else if (futex->waking == 0) {
// should go back to sleep // should go back to sleep
poll_leave(&desc); poll_leave(&desc);
desc.event = NULL;
desc.data[0].revents = 0;
continue; continue;
} else { } else {
// can leave normally! // can leave normally!
@@ -137,16 +142,17 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value
// clean up if needed // clean up if needed
if (futex->waiting == 0) { if (futex->waiting == 0) {
poll_leave(&desc);
doleave = false; doleave = false;
free(futex);
removefutex(physical); removefutex(physical);
free(futex);
} }
ret.ret = 0; ret.ret = 0;
break; break;
} }
break; break;
default: default:
ret.errno = ENOSYS; ret.errno = ENOSYS;
} }