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):
_bridgestemp = {}
_bridgetemp = {}
for _bridge in BRIDGES:
for _bridge in list(BRIDGES):
for _bridgesystem in BRIDGES[_bridge]:
if _bridgesystem['SYSTEM'] != system:
if _bridge not in _bridgestemp:
@ -351,7 +351,7 @@ def remove_bridge_system(system):
def deactivate_all_dynamic_bridges(system_name):
"""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
continue
for _sys_entry in BRIDGES[_bridge]:
@ -370,7 +370,7 @@ def rule_timer_loop():
# Mantener registro de bridges dinámicos activos por sistema
_active_dynamic_bridges = {}
for _bridge in BRIDGES:
for _bridge in list(BRIDGES):
_bridge_used = False
### MODIFIED: Detect special TGIDs (9990-9999) to exclude them from infinite timer logic
@ -465,7 +465,7 @@ def rule_timer_loop():
def statTrimmer():
logger.debug('(ROUTER) STAT trimmer loop started')
_remove_bridges = deque()
for _bridge in BRIDGES:
for _bridge in list(BRIDGES):
_bridge_stat = False
_in_use = False
for _system in BRIDGES[_bridge]:
@ -498,8 +498,8 @@ def bridgeDebug():
bridgeroll = 0
dialroll = 0
activeroll = 0
for _bridge in BRIDGES:
for enabled_system in BRIDGES[_bridge]:
for _bridge in list(BRIDGES):
for enabled_system in BRIDGES.get(_bridge, []):
if enabled_system['SYSTEM'] == system:
bridgeroll += 1
if enabled_system['ACTIVE']:
@ -517,8 +517,8 @@ def bridgeDebug():
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)
times = {}
for _bridge in BRIDGES:
for enabled_system in BRIDGES[_bridge]:
for _bridge in list(BRIDGES):
for enabled_system in BRIDGES.get(_bridge, []):
if enabled_system['ACTIVE'] and _bridge and _bridge[0:1] == '#':
times[enabled_system['TIMER']] = _bridge
ordered = sorted(times.keys())

Loading…
Cancel
Save

Powered by TurnKey Linux.