Description
Hello,
When using the following snippet in my code (as part of a Wiegand reader program) on a Raspberry Pi 0:
let monitor_0: Next<AsyncLineEventHandle> = events0.next();
let monitor_1: Next<AsyncLineEventHandle> = events1.next();
pin!(monitor_0, monitor_1);
select! {
res = monitor_0 => { data = data << 1; },
res = monitor_1 => { data = (data << 1) | 1 as u64; },
}
it seems like the code ends up in a Deadlock in the select! macro after running this snippet for 128 times, after which the program uses 100% CPU but neither of the Next
s ever completes.
events0
and events1
are AsyncLineEventHandle
s that come from Line
s that come from the same Chip
.
Introducing a millisecond delay at the very top increases the amount of bytes that can be read to 256.
Introducing a larger delay seems to remove the deadlock all together, but the ordering of the events is lost causing the data to become garbage as the order of the events determines the final data output.
I'm not certain if this is a gpio-cdev problem, a kernel problem, or if I'm simply doing this incorrectly.
Any feedback is highly appreciated.