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
1 changed files with 29 additions and 16 deletions

View File

@ -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))