mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 02:00:45 +00:00
connection: Ensure we don't leak too many BackgroundCommand
Make BackgroundCommand.__init__() poll all current BackgroundCommands on the associated connection so they deregister themselves if they are completed. This ensures that a BackgroundCommand-heavy application that also does not close them properly will not accumulate useless instances forever and leak associated resources like Popen objects.
This commit is contained in:
parent
1239fd922e
commit
45aebdaca9
@ -123,6 +123,19 @@ class BackgroundCommand(ABC):
|
|||||||
|
|
||||||
def __init__(self, conn):
|
def __init__(self, conn):
|
||||||
self.conn = conn
|
self.conn = conn
|
||||||
|
|
||||||
|
# Poll currently opened background commands on that connection to make
|
||||||
|
# them deregister themselves if they are completed. This avoids
|
||||||
|
# accumulating terminated commands and therefore leaking associated
|
||||||
|
# resources if the user is not careful and does not use the context
|
||||||
|
# manager API.
|
||||||
|
for bg_cmd in set(conn._current_bg_cmds):
|
||||||
|
try:
|
||||||
|
bg_cmd.poll()
|
||||||
|
# We don't want anything to fail here because of another command
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
conn._current_bg_cmds.add(self)
|
conn._current_bg_cmds.add(self)
|
||||||
|
|
||||||
def _deregister(self):
|
def _deregister(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user