Improve ipcpipe locking
This commit is contained in:
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user