From 027ce4f45b5e79577e2c25a196b37ba572a0802e Mon Sep 17 00:00:00 2001 From: Kevin Froman Date: Fri, 1 Nov 2019 13:35:28 -0500 Subject: [PATCH] fix forking duplicating processes on shutdown and breaking on windows --- onionr/httpapi/onionrsitesapi/__init__.py | 2 ++ onionr/onionrcommands/daemonlaunch.py | 7 ++++++- onionr/onionrcommands/restartonionr.py | 8 +++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/onionr/httpapi/onionrsitesapi/__init__.py b/onionr/httpapi/onionrsitesapi/__init__.py index 46609a4e..a07b4f0b 100644 --- a/onionr/httpapi/onionrsitesapi/__init__.py +++ b/onionr/httpapi/onionrsitesapi/__init__.py @@ -19,6 +19,7 @@ """ import base64 import binascii +import mimetypes import unpaddedbase32 @@ -37,6 +38,7 @@ site_api = Blueprint('siteapi', __name__) def site(name: str)->Response: """Accept a site 'name', if pubkey then show multi-page site, if hash show single page site""" resp: str = 'Not Found' + mime_type = 'text/html' # If necessary convert the name to base32 from mnemonic if mnemonickeys.DELIMITER in name: diff --git a/onionr/onionrcommands/daemonlaunch.py b/onionr/onionrcommands/daemonlaunch.py index 455a38cc..001d1152 100755 --- a/onionr/onionrcommands/daemonlaunch.py +++ b/onionr/onionrcommands/daemonlaunch.py @@ -126,7 +126,12 @@ def kill_daemon(): ''' logger.warn('Stopping the running daemon...', timestamp = False, terminal=True) try: - os.fork() + # On platforms where we can, fork out to prevent locking + try: + pid = os.fork() + if pid != 0: return + except (AttributeError, OSError) as e: pass + events.event('daemon_stop') net = NetController(config.get('client.port', 59496)) try: diff --git a/onionr/onionrcommands/restartonionr.py b/onionr/onionrcommands/restartonionr.py index 12b7ef89..c7bdab7d 100644 --- a/onionr/onionrcommands/restartonionr.py +++ b/onionr/onionrcommands/restartonionr.py @@ -33,7 +33,13 @@ SCRIPT_NAME = os.path.dirname(os.path.realpath(__file__)) + f'/../../{onionrvalu def restart(): logger.info('Restarting Onionr', terminal=True) - os.fork() + + # On platforms where we can, fork out to prevent locking + try: + pid = os.fork() + if pid != 0: return + except (AttributeError, OSError) as e: pass + daemonlaunch.kill_daemon() while localcommand.local_command('ping', maxWait=8) == 'pong!': time.sleep(0.3)