diff --git a/src/helper_generic.py b/src/helper_generic.py index 588ae8f1..699df8b8 100644 --- a/src/helper_generic.py +++ b/src/helper_generic.py @@ -1,9 +1,14 @@ -import os +""" +Helper Generic perform generic oprations for threading. + +Also perform some conversion operations. +""" + import socket import sys from binascii import hexlify, unhexlify from multiprocessing import current_process -from threading import current_thread, enumerate +import threading import traceback import shared @@ -11,16 +16,18 @@ from debug import logger import queues import shutdown + def powQueueSize(): curWorkerQueue = queues.workerQueue.qsize() - for thread in enumerate(): + for thread in threading.enumerate(): try: if thread.name == "singleWorker": curWorkerQueue += thread.busy - except: - pass + except Exception as err: + logger.info("Thread error %s", err) return curWorkerQueue + def convertIntToString(n): a = __builtins__.hex(n) if a[-1:] == 'L': @@ -30,28 +37,33 @@ def convertIntToString(n): else: return unhexlify('0' + a[2:]) + def convertStringToInt(s): return int(hexlify(s), 16) + def allThreadTraceback(frame): - id2name = dict([(th.ident, th.name) for th in enumerate()]) + id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) code = [] for threadId, stack in sys._current_frames().items(): - code.append("\n# Thread: %s(%d)" % (id2name.get(threadId,""), threadId)) + code.append("\n# Thread: %s(%d)" % ( + id2name.get(threadId, ""), threadId)) for filename, lineno, name, line in traceback.extract_stack(stack): - code.append('File: "%s", line %d, in %s' % (filename, lineno, name)) + code.append('File: "%s", line %d, in %s' % ( + filename, lineno, name)) if line: code.append(" %s" % (line.strip())) print "\n".join(code) + def signal_handler(signal, frame): - logger.error("Got signal %i in %s/%s", signal, current_process().name, current_thread().name) - if current_process().name == "RegExParser": - # on Windows this isn't triggered, but it's fine, it has its own process termination thing - raise SystemExit + logger.error("Got signal %i in %s/%s", signal, + current_process().name, + threading.current_thread().name) if "PoolWorker" in current_process().name: raise SystemExit - if current_thread().name not in ("PyBitmessage", "MainThread"): + if threading.current_thread().name not in ( + "PyBitmessage", "MainThread"): return logger.error("Got signal %i", signal) if shared.thisapp.daemon: @@ -60,8 +72,9 @@ def signal_handler(signal, frame): allThreadTraceback(frame) print 'Unfortunately you cannot use Ctrl+C when running the UI because the UI captures the signal.' + def isHostInPrivateIPRange(host): - if ":" in host: #IPv6 + if ":" in host: # IPv6 hostAddr = socket.inet_pton(socket.AF_INET6, host) if hostAddr == ('\x00' * 15) + '\x01': return False @@ -69,7 +82,6 @@ def isHostInPrivateIPRange(host): return False if (ord(hostAddr[0]) & 0xfe) == 0xfc: return False - pass elif ".onion" not in host: if host[:3] == '10.': return True @@ -84,5 +96,6 @@ def isHostInPrivateIPRange(host): return True return False -def addDataPadding(data, desiredMsgLength = 12, paddingChar = '\x00'): + +def addDataPadding(data, desiredMsgLength=12, paddingChar='\x00'): return data + paddingChar * (desiredMsgLength - len(data))