Improve ipcpipe locking

This commit is contained in:
2025-10-15 23:26:14 +02:00
parent eefff6e492
commit 48231931bd
2 changed files with 7 additions and 1 deletions

View File

@ -62,7 +62,7 @@
.endm .endm
.macro _vecintr_bodygen .macro _vecintr_bodygen
cli // cli
_push_regs _push_regs
cld cld
movq %rsp, %rdi movq %rsp, %rdi

View File

@ -15,7 +15,9 @@ int32_t SYSCALL4(sys_ipc_piperead, pid1, pipenum1, buffer1, len1) {
int32_t ret = E_OK; int32_t ret = E_OK;
if (pid == (uint64_t)-1) { if (pid == (uint64_t)-1) {
spinlock_acquire(&PROCS.spinlock);
pid = PROCS.current->pid; pid = PROCS.current->pid;
spinlock_release(&PROCS.spinlock);
} }
spinlock_acquire(&PROCS.spinlock); spinlock_acquire(&PROCS.spinlock);
@ -59,7 +61,9 @@ int32_t SYSCALL4(sys_ipc_pipewrite, pid1, pipenum1, buffer1, len1) {
int32_t ret = E_OK; int32_t ret = E_OK;
if (pid == (uint64_t)-1) { if (pid == (uint64_t)-1) {
spinlock_acquire(&PROCS.spinlock);
pid = PROCS.current->pid; pid = PROCS.current->pid;
spinlock_release(&PROCS.spinlock);
} }
spinlock_acquire(&PROCS.spinlock); spinlock_acquire(&PROCS.spinlock);
@ -170,7 +174,9 @@ int32_t SYSCALL4(sys_ipc_pipeconnect, pid1, pipenum1, pid2, pipenum2) {
int32_t ret = E_OK; int32_t ret = E_OK;
if (pid == (uint64_t)-1) { if (pid == (uint64_t)-1) {
spinlock_acquire(&PROCS.spinlock);
pid = PROCS.current->pid; pid = PROCS.current->pid;
spinlock_release(&PROCS.spinlock);
} }
spinlock_acquire(&PROCS.spinlock); spinlock_acquire(&PROCS.spinlock);