diff --git a/kernel/src/ipc/semaphore/system_v/sem.rs b/kernel/src/ipc/semaphore/system_v/sem.rs index 765f03c65..bc8d9ad20 100644 --- a/kernel/src/ipc/semaphore/system_v/sem.rs +++ b/kernel/src/ipc/semaphore/system_v/sem.rs @@ -166,7 +166,7 @@ impl Semaphore { ); } - fn sem_op(&self, sem_buf: SemBuf, timeout: Option, ctx: &Context) -> Result<()> { + fn sem_op(&self, sem_buf: &SemBuf, timeout: Option, ctx: &Context) -> Result<()> { let mut val = self.val.lock(); let sem_op = sem_buf.sem_op; let current_pid = ctx.process.pid(); @@ -208,7 +208,7 @@ impl Semaphore { let (waiter, waker) = Waiter::new_pair(); let status = Arc::new(AtomicStatus::new(Status::Pending)); let pending_op = Box::new(PendingOp { - sem_buf, + sem_buf: *sem_buf, status: status.clone(), waker: waker.clone(), process: ctx.posix_thread.weak_process(), @@ -303,7 +303,7 @@ impl Semaphore { pub fn sem_op( sem_id: key_t, - sem_buf: SemBuf, + sem_buf: &SemBuf, timeout: Option, ctx: &Context, ) -> Result<()> { diff --git a/kernel/src/syscall/semop.rs b/kernel/src/syscall/semop.rs index 2e71fc7bf..7c07de87a 100644 --- a/kernel/src/syscall/semop.rs +++ b/kernel/src/syscall/semop.rs @@ -61,7 +61,7 @@ fn do_sys_semtimedop( let sem_buf = CurrentUserSpace::get().read_val::(tsops + size_of::() * i)?; - sem_op(sem_id, sem_buf, timeout, ctx)?; + sem_op(sem_id, &sem_buf, timeout, ctx)?; } Ok(SyscallReturn::Return(0))