Fix RuntimeError: dictionary changed size during iteration - use list(BRIDGES) for thread-safe iteration in all functions that access BRIDGES

pull/26/head
Joaquin Madrid Belando 2 weeks ago
parent f75fb358d0
commit 8bb2a6ffa9

@ -336,7 +336,7 @@ def make_single_reflector(_tgid,_tmout,_sourcesystem):
def remove_bridge_system(system): def remove_bridge_system(system):
_bridgestemp = {} _bridgestemp = {}
_bridgetemp = {} _bridgetemp = {}
for _bridge in BRIDGES: for _bridge in list(BRIDGES):
for _bridgesystem in BRIDGES[_bridge]: for _bridgesystem in BRIDGES[_bridge]:
if _bridgesystem['SYSTEM'] != system: if _bridgesystem['SYSTEM'] != system:
if _bridge not in _bridgestemp: if _bridge not in _bridgestemp:
@ -351,7 +351,7 @@ def remove_bridge_system(system):
def deactivate_all_dynamic_bridges(system_name): def deactivate_all_dynamic_bridges(system_name):
"""Desactiva todos los bridges dinámicos (no estáticos, no reflectores) de un sistema.""" """Desactiva todos los bridges dinámicos (no estáticos, no reflectores) de un sistema."""
for _bridge in BRIDGES: for _bridge in list(BRIDGES):
if _bridge[0:1] == '#': # Saltar reflectores if _bridge[0:1] == '#': # Saltar reflectores
continue continue
for _sys_entry in BRIDGES[_bridge]: for _sys_entry in BRIDGES[_bridge]:
@ -370,7 +370,7 @@ def rule_timer_loop():
# Mantener registro de bridges dinámicos activos por sistema # Mantener registro de bridges dinámicos activos por sistema
_active_dynamic_bridges = {} _active_dynamic_bridges = {}
for _bridge in BRIDGES: for _bridge in list(BRIDGES):
_bridge_used = False _bridge_used = False
### MODIFIED: Detect special TGIDs (9990-9999) to exclude them from infinite timer logic ### MODIFIED: Detect special TGIDs (9990-9999) to exclude them from infinite timer logic
@ -465,7 +465,7 @@ def rule_timer_loop():
def statTrimmer(): def statTrimmer():
logger.debug('(ROUTER) STAT trimmer loop started') logger.debug('(ROUTER) STAT trimmer loop started')
_remove_bridges = deque() _remove_bridges = deque()
for _bridge in BRIDGES: for _bridge in list(BRIDGES):
_bridge_stat = False _bridge_stat = False
_in_use = False _in_use = False
for _system in BRIDGES[_bridge]: for _system in BRIDGES[_bridge]:
@ -498,8 +498,8 @@ def bridgeDebug():
bridgeroll = 0 bridgeroll = 0
dialroll = 0 dialroll = 0
activeroll = 0 activeroll = 0
for _bridge in BRIDGES: for _bridge in list(BRIDGES):
for enabled_system in BRIDGES[_bridge]: for enabled_system in BRIDGES.get(_bridge, []):
if enabled_system['SYSTEM'] == system: if enabled_system['SYSTEM'] == system:
bridgeroll += 1 bridgeroll += 1
if enabled_system['ACTIVE']: if enabled_system['ACTIVE']:
@ -517,8 +517,8 @@ def bridgeDebug():
if dialroll > 1 and CONFIG['SYSTEMS'][system]['MODE'] == 'MASTER': if dialroll > 1 and CONFIG['SYSTEMS'][system]['MODE'] == 'MASTER':
logger.warning('(BRIDGEDEBUG) system %s has more than one active dial bridge (%s) - fixing',system, dialroll) logger.warning('(BRIDGEDEBUG) system %s has more than one active dial bridge (%s) - fixing',system, dialroll)
times = {} times = {}
for _bridge in BRIDGES: for _bridge in list(BRIDGES):
for enabled_system in BRIDGES[_bridge]: for enabled_system in BRIDGES.get(_bridge, []):
if enabled_system['ACTIVE'] and _bridge and _bridge[0:1] == '#': if enabled_system['ACTIVE'] and _bridge and _bridge[0:1] == '#':
times[enabled_system['TIMER']] = _bridge times[enabled_system['TIMER']] = _bridge
ordered = sorted(times.keys()) ordered = sorted(times.keys())

Loading…
Cancel
Save

Powered by TurnKey Linux.