fixed subprocesspow not exiting on wsl

master
Kevin Froman 2020-12-01 16:24:10 -06:00
parent e831a27ae3
commit eaf61c280a
7 changed files with 25 additions and 14 deletions

View File

@ -66,6 +66,10 @@ class PrivateEndpoints:
return send_from_directory(config.get('www.private.path', return send_from_directory(config.get('www.private.path',
'static-data/www/private/'), path) 'static-data/www/private/'), path)
@private_endpoints_bp.route('/getpid')
def get_pid():
return Response(str(os.getpid()))
@private_endpoints_bp.route('/hitcount') @private_endpoints_bp.route('/hitcount')
def get_hit_count(): def get_hit_count():
return Response(str(client_api.publicAPI.hitCount)) return Response(str(client_api.publicAPI.hitCount))

View File

@ -44,6 +44,10 @@ def _lan_work(peer: LANIP):
url + f'get/{block}', stream=True).raw.read(6000000)) url + f'get/{block}', stream=True).raw.read(6000000))
except onionrexceptions.InvalidMetadata: except onionrexceptions.InvalidMetadata:
logger.warn(f"Could not get {block} from lan peer") logger.warn(f"Could not get {block} from lan peer")
except onionrexceptions.InvalidProof:
logger.warn(
f"Invalid proof for {block} from lan peer {peer}", terminal=True)
break
for port in ports: for port in ports:
try: try:

View File

@ -120,7 +120,7 @@ class NetController:
tor_pid_file.write(str(tor.pid)) tor_pid_file.write(str(tor.pid))
multiprocessing.Process(target=watchdog.watchdog, multiprocessing.Process(target=watchdog.watchdog,
args=[os.getpid(), tor.pid]).start() args=[os.getpid(), tor.pid], daemon=True).start()
logger.info('Finished starting Tor.', terminal=True) logger.info('Finished starting Tor.', terminal=True)

View File

@ -129,9 +129,17 @@ def daemon():
"""Start Onionr's primary threads for communicator, API server, node, and LAN.""" """Start Onionr's primary threads for communicator, API server, node, and LAN."""
def _handle_sig_term(signum, frame): def _handle_sig_term(signum, frame):
logger.info( pid = str(os.getpid())
"Received sigterm, shutting down gracefully", terminal=True) main_pid = localcommand.local_command('/getpid')
localcommand.local_command('/shutdownclean') #logger.info(main_pid, terminal=True)
if main_pid and main_pid == pid:
logger.info(
f"Received sigterm, shutting down gracefully. PID: {pid}", terminal=True)
localcommand.local_command('/shutdownclean')
else:
logger.info(
f"Recieved sigterm in child process or fork, exiting. PID: {pid}")
sys.exit(0)
signal.signal(signal.SIGTERM, _handle_sig_term) signal.signal(signal.SIGTERM, _handle_sig_term)
# Determine if Onionr is in offline mode. # Determine if Onionr is in offline mode.
@ -233,11 +241,6 @@ def daemon():
filenuke.nuke.clean_tree(identifyhome.identify_home()) filenuke.nuke.clean_tree(identifyhome.identify_home())
def _ignore_sigint(sig, frame): # pylint: disable=W0612,W0613
"""Space intentionally left blank."""
return
def start(override: bool = False): def start(override: bool = False):
"""If no lock file, make one and start onionr. """If no lock file, make one and start onionr.

View File

@ -94,7 +94,7 @@ class SubprocessPOW:
parent_conn, child_conn = Pipe() parent_conn, child_conn = Pipe()
p = Process(target=self.do_pow, args=(child_conn,), daemon=True) p = Process(target=self.do_pow, args=(child_conn,), daemon=True)
p.start() p.start()
p.join() #p.join()
payload = None payload = None
try: try:
while True: while True:
@ -105,7 +105,7 @@ class SubprocessPOW:
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
finally: finally:
parent_conn.send('shutdown') p.terminate()
self.payload = payload self.payload = payload
def do_pow(self, pipe): def do_pow(self, pipe):

View File

@ -48,7 +48,7 @@ def find_vanity_mnemonic(start_words: str, queue):
def _start(start_words, obj): def _start(start_words, obj):
done = False done = False
q = Queue() q = Queue()
p = Process(target=find_vanity_mnemonic, args=[start_words, q]) p = Process(target=find_vanity_mnemonic, args=[start_words, q], daemon=True)
p.daemon = True p.daemon = True
p.start() p.start()
rec = None rec = None
@ -68,7 +68,7 @@ def handler(start_words: str):
obj = lambda test: None obj = lambda test: None
obj.done = False obj.done = False
for x in range(multiprocessing.cpu_count()): for x in range(multiprocessing.cpu_count()):
threading.Thread(target=_start, args=[start_words, obj]).start() threading.Thread(target=_start, args=[start_words, obj], daemon=True).start()
while not obj.done: while not obj.done:
time.sleep(1) time.sleep(1)
return obj.result return obj.result

View File

@ -71,7 +71,7 @@
"tor": true "tor": true
}, },
"ui": { "ui": {
"animated_background": true, "animated_background": false,
"public_remote_enabled": false, "public_remote_enabled": false,
"public_remote_hosts": [], "public_remote_hosts": [],
"theme": "dark" "theme": "dark"