-
Couldn't load subscription status.
- Fork 654
Open
Labels
Description
Describe the bug
I think, though being not sure, that the timeout in Notifier does not work as expected.
From the definition of BusABC.recv(timeout) in here on timeout it returns None that is currently being discarded in Notifier._rx_thread as defined here.
To Reproduce
import time
import can
class MyListener(can.Listener):
def on_message_received(self, msg: can.Message) -> None:
if msg is None:
print("Timeout occurred.")
else:
print(f'Message received: {msg}')
def main():
with can.Bus(interface="virtual", receive_own_messages=True) as bus:
print_listener = MyListener()
notifier = can.Notifier(bus, [print_listener], timeout=1.0)
time.sleep(2.0)
bus.send(can.Message(arbitration_id=1, is_extended_id=False))
notifier.stop()
if __name__ == "__main__":
main()Expected behaviour
I expect Listener to call "Timeout occurred." in the provided example.
Currently on_message_received is not called on timeout.
I would welcome discussion and help about how to realize timeout behaviour in Listener - Notifier architecture. I think there should be a way to let Listeners handle being starved.