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.
|
self.lss = LssMaster() |
|
self.lss.network = self |
|
self.subscribe(self.lss.LSS_RX_COBID, self.lss.on_message_received) |
|
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:
|
if not self.responses.empty(): |
|
logger.info("There were unexpected messages in the queue") |
|
self.responses = queue.Queue() |
As #574 was closed there is a specific issue with
LssMasterin the current implementation:If this library is together with another LSS master present on the physical bus, the input queue of
LssMasterwill be filled up with CAN messages, eventually leading to memory overload. It is only emptied when theLssMasteris actively used to send LSS commands. This is becauseNetworkcreates anLssMasterinstance and activates the subscription to the LSS messages.canopen/canopen/network.py
Lines 53 to 55 in f1a71da
canopen/canopen/lss.py
Lines 396 to 397 in f1a71da
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:canopen/canopen/lss.py
Lines 377 to 379 in f1a71da