Ensure pipe is_alive is set before triggering event or condition

This commit is contained in:
Jeremy Soller
2025-11-14 20:59:44 -07:00
parent 2d9f2015d0
commit e14f935063
+4 -6
View File
@@ -102,17 +102,15 @@ impl KernelScheme for PipeScheme {
let scheme_id = GlobalSchemes::Pipe.scheme_id();
let can_remove = if is_write_not_read {
event::trigger(scheme_id, key, EVENT_READ);
pipe.read_condition.notify(token);
pipe.writer_is_alive.store(false, Ordering::SeqCst);
event::trigger(scheme_id, key, EVENT_READ);
pipe.read_condition.notify(token);
!pipe.reader_is_alive.load(Ordering::SeqCst)
} else {
event::trigger(scheme_id, key | WRITE_NOT_READ_BIT, EVENT_WRITE);
pipe.write_condition.notify(token);
pipe.reader_is_alive.store(false, Ordering::SeqCst);
event::trigger(scheme_id, key | WRITE_NOT_READ_BIT, EVENT_WRITE);
pipe.write_condition.notify(token);
!pipe.writer_is_alive.load(Ordering::SeqCst)
};