mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-23 17:47:31 +00:00
In 'daemon start', do not return until the daemon can be reached
This commit is contained in:
parent
5ec1db4d51
commit
ed086934e5
1 changed files with 32 additions and 5 deletions
37
run_electrum
37
run_electrum
|
@ -24,6 +24,7 @@
|
||||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
# SOFTWARE.
|
# SOFTWARE.
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
import asyncio
|
import asyncio
|
||||||
|
@ -273,6 +274,16 @@ def sys_exit(i):
|
||||||
loop_thread.join(timeout=1)
|
loop_thread.join(timeout=1)
|
||||||
sys.exit(i)
|
sys.exit(i)
|
||||||
|
|
||||||
|
def can_ping_daemon(config):
|
||||||
|
try:
|
||||||
|
daemon.request(config, 'ping')
|
||||||
|
return True
|
||||||
|
except daemon.DaemonNotRunning:
|
||||||
|
return False
|
||||||
|
except BaseException as e:
|
||||||
|
print_stderr(e)
|
||||||
|
return False
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# The hook will only be used in the Qt GUI right now
|
# The hook will only be used in the Qt GUI right now
|
||||||
util.setup_thread_excepthook()
|
util.setup_thread_excepthook()
|
||||||
|
@ -348,6 +359,8 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
# todo: defer this to gui
|
# todo: defer this to gui
|
||||||
config = SimpleConfig(config_options)
|
config = SimpleConfig(config_options)
|
||||||
|
# this sets rpc_password as side effect
|
||||||
|
daemon.get_rpc_credentials(config)
|
||||||
|
|
||||||
cmdname = config.get('cmd')
|
cmdname = config.get('cmd')
|
||||||
subcommand = config.get('subcommand')
|
subcommand = config.get('subcommand')
|
||||||
|
@ -361,12 +374,28 @@ if __name__ == '__main__':
|
||||||
elif config.get('lightning') and not config.get('reckless'):
|
elif config.get('lightning') and not config.get('reckless'):
|
||||||
raise Exception('lightning branch not available on mainnet')
|
raise Exception('lightning branch not available on mainnet')
|
||||||
|
|
||||||
|
loop, stop_loop, loop_thread = create_and_start_event_loop()
|
||||||
|
|
||||||
if cmdname == 'daemon' and subcommand == 'start':
|
if cmdname == 'daemon' and subcommand == 'start':
|
||||||
# fork before creating the asyncio event loop
|
if can_ping_daemon(config):
|
||||||
|
print_stderr('daemon already running')
|
||||||
|
sys_exit(1)
|
||||||
|
loop.call_soon_threadsafe(stop_loop.set_result, 1)
|
||||||
|
loop_thread.join(timeout=1)
|
||||||
|
# we must fork before creating the asyncio event loop,
|
||||||
|
# see https://bugs.python.org/issue21998
|
||||||
pid = os.fork()
|
pid = os.fork()
|
||||||
|
loop, stop_loop, loop_thread = create_and_start_event_loop()
|
||||||
if pid:
|
if pid:
|
||||||
print_stderr("starting daemon (PID %d)" % pid)
|
for i in range(10):
|
||||||
sys.exit(0)
|
if can_ping_daemon(config):
|
||||||
|
break
|
||||||
|
time.sleep(0.5)
|
||||||
|
else:
|
||||||
|
print_stderr("Could not contact daemon, giving up")
|
||||||
|
sys_exit(1)
|
||||||
|
print_stderr("Daemon started (PID %d)" % pid)
|
||||||
|
sys_exit(0)
|
||||||
else:
|
else:
|
||||||
# redirect standard file descriptors
|
# redirect standard file descriptors
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
@ -378,8 +407,6 @@ if __name__ == '__main__':
|
||||||
os.dup2(so.fileno(), sys.stdout.fileno())
|
os.dup2(so.fileno(), sys.stdout.fileno())
|
||||||
os.dup2(se.fileno(), sys.stderr.fileno())
|
os.dup2(se.fileno(), sys.stderr.fileno())
|
||||||
|
|
||||||
loop, stop_loop, loop_thread = create_and_start_event_loop()
|
|
||||||
|
|
||||||
if cmdname == 'gui':
|
if cmdname == 'gui':
|
||||||
configure_logging(config)
|
configure_logging(config)
|
||||||
fd = daemon.get_file_descriptor(config)
|
fd = daemon.get_file_descriptor(config)
|
||||||
|
|
Loading…
Add table
Reference in a new issue