From 8bb2a6ffa91713a22c2b646279a6579b8b768f1d Mon Sep 17 00:00:00 2001 From: Joaquin Madrid Belando Date: Sat, 14 Mar 2026 17:54:35 +0100 Subject: [PATCH] Fix RuntimeError: dictionary changed size during iteration - use list(BRIDGES) for thread-safe iteration in all functions that access BRIDGES --- bridge_master.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bridge_master.py b/bridge_master.py index 075d683..e595ffb 100644 --- a/bridge_master.py +++ b/bridge_master.py @@ -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())