diff --git a/bridge_master.py b/bridge_master.py index 7049b08..19c618e 100644 --- a/bridge_master.py +++ b/bridge_master.py @@ -39,6 +39,7 @@ import importlib.util import re import copy from setproctitle import setproctitle +from collections import deque #from crccheck.crc import Crc32 from hashlib import blake2b @@ -83,9 +84,9 @@ from binascii import b2a_hex as ahex from AMI import AMI #debugging and profiling -import gc +#import gc -gc.set_debug(gc.DEBUG_LEAK | gc.DEBUG_STATS) +#gc.set_debug(gc.DEBUG_LEAK | gc.DEBUG_STATS) ##from hmac import new as hmac_new, compare_digest ##from hashlib import sha256, hash @@ -239,7 +240,7 @@ def make_default_reflector(reflector,_tmout,system): if bridge not in BRIDGES: BRIDGES[bridge] = [] make_single_reflector(bytes_3(reflector),_tmout, system) - bridgetemp = [] + bridgetemp = deque() for bridgesystem in BRIDGES[bridge]: if bridgesystem['SYSTEM'] == system and bridgesystem['TS'] == 2: bridgetemp.append({'SYSTEM': system, 'TS': 2, 'TGID': bytes_3(9),'ACTIVE': True,'TIMEOUT': _tmout * 60,'TO_TYPE': 'OFF','OFF': [],'ON': [bytes_3(reflector),],'RESET': [], 'TIMER': time() + (_tmout * 60)}) @@ -252,7 +253,7 @@ def make_static_tg(tg,ts,_tmout,system): #_tmout = CONFIG['SYSTEMS'][system]['DEFAULT_UA_TIMER'] if str(tg) not in BRIDGES: make_single_bridge(bytes_3(tg),system,ts,_tmout) - bridgetemp = [] + bridgetemp = deque() for bridgesystem in BRIDGES[str(tg)]: if bridgesystem['SYSTEM'] == system and bridgesystem['TS'] == ts: bridgetemp.append({'SYSTEM': system, 'TS': ts, 'TGID': bytes_3(tg),'ACTIVE': True,'TIMEOUT': _tmout * 60,'TO_TYPE': 'OFF','OFF': [],'ON': [bytes_3(tg),],'RESET': [], 'TIMER': time() + (_tmout * 60)}) @@ -263,7 +264,7 @@ def make_static_tg(tg,ts,_tmout,system): def reset_static_tg(tg,ts,_tmout,system): #_tmout = CONFIG['SYSTEMS'][system]['DEFAULT_UA_TIMER'] - bridgetemp = [] + bridgetemp = deque() try: for bridgesystem in BRIDGES[str(tg)]: if bridgesystem['SYSTEM'] == system and bridgesystem['TS'] == ts: @@ -282,7 +283,7 @@ def reset_default_reflector(reflector,_tmout,system): if bridge not in BRIDGES: BRIDGES[bridge] = [] make_single_reflector(bytes_3(reflector),_tmout, system) - bridgetemp = [] + bridgetemp = deque() for bridgesystem in BRIDGES[bridge]: if bridgesystem['SYSTEM'] == system and bridgesystem['TS'] == 2: bridgetemp.append({'SYSTEM': system, 'TS': 2, 'TGID': bytes_3(9),'ACTIVE': False,'TIMEOUT': _tmout * 60,'TO_TYPE': 'ON','OFF': [],'ON': [bytes_3(reflector),],'RESET': [], 'TIMER': time() + (_tmout * 60)}) @@ -324,7 +325,7 @@ def remove_bridge_system(system): def rule_timer_loop(): logger.debug('(ROUTER) routerHBP Rule timer loop started') _now = time() - _remove_bridges = [] + _remove_bridges = deque() for _bridge in BRIDGES: _bridge_used = False for _system in BRIDGES[_bridge]: @@ -374,7 +375,7 @@ def rule_timer_loop(): def statTrimmer(): logger.debug('(ROUTER) STAT trimmer loop started') - _remove_bridges = [] + _remove_bridges = deque() for _bridge in BRIDGES: _bridge_stat = False _in_use = False @@ -394,7 +395,7 @@ def statTrimmer(): report_server.send_clients(b'bridge updated') #Run garbage collector manually - gc.collect() + #gc.collect() def kaReporting(): logger.debug('(ROUTER) KeepAlive reporting loop started') @@ -421,7 +422,7 @@ def subMapWrite(): def SubMapTrimmer(): logger.debug('(SUBSCRIBER) Subscriber Map trimmer loop started') _sub_time = time() - _remove_list = [] + _remove_list = deque() for _subscriber in SUB_MAP: if SUB_MAP[_subscriber][2] < (_sub_time - 86400): _remove_list.append(_subscriber) @@ -470,8 +471,8 @@ def stream_trimmer_loop(): # OBP systems # We can't delete items from a dicationry that's being iterated, so we have to make a temporarly list of entrys to remove later if CONFIG['SYSTEMS'][system]['MODE'] == 'OPENBRIDGE': - remove_list = [] - fin_list = [] + remove_list = deque() + fin_list = deque() for stream_id in systems[system].STATUS: #if stream already marked as finished, just remove it @@ -533,7 +534,7 @@ def stream_trimmer_loop(): removed = systems[system].STATUS.pop(stream_id) try: - _bcsq_remove = [] + _bcsq_remove = deque() for tgid in _sysconfig['_bcsq']: if _sysconfig['_bcsq'][tgid] == stream_id: _bcsq_remove.append(tgid) @@ -1861,7 +1862,7 @@ class routerOBP(OPENBRIDGE): logger.debug('(%s) Bridge for STAT TG %s does not exist. Creating',self._system, int_id(_dst_id)) make_stat_bridge(_dst_id) - _sysIgnore = [] + _sysIgnore = deque() for _bridge in BRIDGES: for _system in BRIDGES[_bridge]: @@ -2667,7 +2668,7 @@ class routerHBP(HBSYSTEM): #Save this packet self.STATUS[_slot]['lastData'] = _data - _sysIgnore = [] + _sysIgnore = deque() for _bridge in BRIDGES: #if _bridge[0:1] != '#': if True: @@ -2976,7 +2977,7 @@ if __name__ == '__main__': #Generator generator = {} - systemdelete = [] + systemdelete = deque() for system in CONFIG['SYSTEMS']: if CONFIG['SYSTEMS'][system]['ENABLED']: if CONFIG['SYSTEMS'][system]['MODE'] == 'MASTER' and (CONFIG['SYSTEMS'][system]['GENERATOR'] > 1): diff --git a/hblink.py b/hblink.py index 28fe40f..edad688 100755 --- a/hblink.py +++ b/hblink.py @@ -91,7 +91,7 @@ def config_reports(_config, _factory): logger.info('(GLOBAL) HBlink TCP reporting server configured') report_server = _factory(_config) - report_server.clients = [] + report_server.clients = deque() reactor.listenTCP(_config['REPORTS']['REPORT_PORT'], report_server) reporting = task.LoopingCall(reporting_loop, logger, report_server) @@ -762,7 +762,7 @@ class HBSYSTEM(DatagramProtocol): # Aliased in __init__ to maintenance_loop if system is a master def master_maintenance_loop(self): logger.debug('(%s) Master maintenance loop started', self._system) - remove_list = [] + remove_list = deque() for peer in self._peers: _this_peer = self._peers[peer] # Check to see if any of the peers have been quiet (no ping) longer than allowed