Merge branch '1206' into v0.6

This commit is contained in:
Peter Šurda 2018-04-06 22:51:10 +02:00
commit 62e80e9ca7
Signed by untrusted user: PeterSurda
GPG Key ID: 0C5F50C0B5F37D87

View File

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