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 Nexts ever completes.
events0 and events1 are AsyncLineEventHandles that come from Lines 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.
Hello,
When using the following snippet in my code (as part of a Wiegand reader program) on a Raspberry Pi 0:
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
Nexts ever completes.events0andevents1areAsyncLineEventHandles that come fromLines that come from the sameChip.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.