-
Notifications
You must be signed in to change notification settings - Fork 216
Description
As #574 was closed there is a specific issue with LssMaster in the current implementation:
If this library is together with another LSS master present on the physical bus, the input queue of LssMaster will be filled up with CAN messages, eventually leading to memory overload. It is only emptied when the LssMaster is actively used to send LSS commands. This is because Network creates an LssMaster instance and activates the subscription to the LSS messages.
Lines 53 to 55 in f1a71da
| self.lss = LssMaster() | |
| self.lss.network = self | |
| self.subscribe(self.lss.LSS_RX_COBID, self.lss.on_message_received) |
Lines 396 to 397 in f1a71da
| def on_message_received(self, can_id, data, timestamp): | |
| self.responses.put(bytes(data)) |
I think the simplest solution would be not to activate the subscription callback until LssMaster.__send_command() is called. It is also draining the queue at this point:
Lines 377 to 379 in f1a71da
| if not self.responses.empty(): | |
| logger.info("There were unexpected messages in the queue") | |
| self.responses = queue.Queue() |