Fix race condition in ProcessMonitor
If any new external process was enabled/disabled during the process monitoring loop time, a RuntimeError: dictionary changed size during iteration was thrown. This is fixed by pre-building the service list from the dictionary for the iteration. Closes-Bug: #1401042 Change-Id: Id0a3af22fb85992bde35d8c691bee3ddf435639d
This commit is contained in:
parent
0d5586bd68
commit
96685da7bd
@ -220,7 +220,10 @@ class ProcessMonitor(object):
|
||||
|
||||
@lockutils.synchronized("_check_child_processes")
|
||||
def _check_child_processes(self):
|
||||
for service_id in self._process_managers:
|
||||
# we build the list of keys before iterating in the loop to cover
|
||||
# the case where other threads add or remove items from the
|
||||
# dictionary which otherwise will cause a RuntimeError
|
||||
for service_id in list(self._process_managers):
|
||||
pm = self._process_managers.get(service_id)
|
||||
|
||||
if pm and not pm.active:
|
||||
|
Loading…
Reference in New Issue
Block a user