From 48231931bde72a3bafe2c44b743026dcbf70d65e Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Wed, 15 Oct 2025 23:26:14 +0200 Subject: [PATCH] Improve ipcpipe locking --- kernel/hal/x86_64/intr0.S | 2 +- kernel/syscall/ipcpipe.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/hal/x86_64/intr0.S b/kernel/hal/x86_64/intr0.S index 62a6c50..0b3f97b 100644 --- a/kernel/hal/x86_64/intr0.S +++ b/kernel/hal/x86_64/intr0.S @@ -62,7 +62,7 @@ .endm .macro _vecintr_bodygen - cli + // cli _push_regs cld movq %rsp, %rdi diff --git a/kernel/syscall/ipcpipe.c b/kernel/syscall/ipcpipe.c index 467d726..0597efc 100644 --- a/kernel/syscall/ipcpipe.c +++ b/kernel/syscall/ipcpipe.c @@ -15,7 +15,9 @@ int32_t SYSCALL4(sys_ipc_piperead, pid1, pipenum1, buffer1, len1) { int32_t ret = E_OK; if (pid == (uint64_t)-1) { + spinlock_acquire(&PROCS.spinlock); pid = PROCS.current->pid; + spinlock_release(&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; if (pid == (uint64_t)-1) { + spinlock_acquire(&PROCS.spinlock); pid = PROCS.current->pid; + spinlock_release(&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; if (pid == (uint64_t)-1) { + spinlock_acquire(&PROCS.spinlock); pid = PROCS.current->pid; + spinlock_release(&PROCS.spinlock); } spinlock_acquire(&PROCS.spinlock);