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);