From 68e072aac9f15f109606f8fffd3e9d80581a4409 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Tue, 2 Apr 2024 15:01:26 +0200 Subject: [PATCH] Return correct fevent flags in PipeScheme. This fixes a Cargo deadlock. --- src/scheme/pipe.rs | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/scheme/pipe.rs b/src/scheme/pipe.rs index 628af1d7da..dbeed71b77 100644 --- a/src/scheme/pipe.rs +++ b/src/scheme/pipe.rs @@ -87,23 +87,16 @@ impl KernelScheme for PipeScheme { let (is_writer_not_reader, key) = from_raw_id(id); let pipe = Arc::clone(PIPES.read().get(&key).ok_or(Error::new(EBADF))?); - if is_writer_not_reader && flags == EVENT_WRITE { - // TODO: Return correct flags - if pipe.queue.lock().len() >= MAX_QUEUE_SIZE { - return Ok(EventFlags::empty()); - } else { - return Ok(EVENT_WRITE); - } - } else if flags == EVENT_READ { - // TODO: Return correct flags - if pipe.queue.lock().is_empty() { - return Ok(EventFlags::empty()); - } else { - return Ok(EVENT_READ); - } + let mut ready = EventFlags::empty(); + + if is_writer_not_reader && flags == EVENT_WRITE && pipe.queue.lock().len() <= MAX_QUEUE_SIZE { + ready |= EventFlags::EVENT_WRITE; + } + if !is_writer_not_reader && flags == EVENT_READ && !pipe.queue.lock().is_empty() { + ready |= EventFlags::EVENT_READ; } - Ok(EventFlags::empty()) + Ok(ready) } fn fsync(&self, _id: usize) -> Result<()> {