Avoid reentrant error in signal_handler.

This commit is contained in:
tecnovert 2025-01-30 15:20:37 +02:00
parent c7818f5fac
commit a0456cb689
No known key found for this signature in database
GPG key ID: 8ED6D8750C4E3F93
4 changed files with 33 additions and 24 deletions

View file

@ -489,7 +489,7 @@ class BasicSwap(BaseApp):
random.seed(secrets.randbits(128))
def finalise(self):
self.log.info("Finalise")
self.log.info("Finalising")
with self.mxDB:
self.delay_event.set()
@ -1136,9 +1136,8 @@ class BasicSwap(BaseApp):
self.log.error(
"No wallets found for coin {}.".format(ci.coin_name())
)
self.stopRunning(
1
) # systemd will try to restart the process if fail_code != 0
# systemd will try to restart the process if fail_code != 0
self.stopRunning(1)
startup_tries = self.startup_tries
chain_client_settings = self.getChainClientSettings(coin_type)

View file

@ -1990,7 +1990,7 @@ def load_config(config_path):
def signal_handler(sig, frame):
logger.info(f"Signal {sig} detected")
os.write(sys.stdout.fileno(), f"Signal {sig} detected.\n".encode("utf-8"))
def check_btc_fastsync_data(base_dir, sync_filename):

View file

@ -6,14 +6,14 @@
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
import os
import sys
import json
import logging
import os
import shutil
import signal
import logging
import traceback
import subprocess
import sys
import traceback
import basicswap.config as cfg
from basicswap import __version__
@ -24,10 +24,11 @@ from basicswap.http_server import HttpThread
from basicswap.contrib.websocket_server import WebsocketServer
logger = logging.getLogger()
logger.level = logging.DEBUG
if not len(logger.handlers):
logger.addHandler(logging.StreamHandler(sys.stdout))
initial_logger = logging.getLogger()
initial_logger.level = logging.DEBUG
if not len(initial_logger.handlers):
initial_logger.addHandler(initial_logger.StreamHandler(sys.stdout))
logger = initial_logger
swap_client = None
@ -48,9 +49,10 @@ def is_known_coin(coin_name: str) -> bool:
def signal_handler(sig, frame):
global swap_client
logger.info("Signal %d detected, ending program." % (sig))
if swap_client is not None:
os.write(
sys.stdout.fileno(), f"Signal {sig} detected, ending program.\n".encode("utf-8")
)
if swap_client is not None and not swap_client.chainstate_delay_event.is_set():
swap_client.stopRunning()
@ -533,7 +535,7 @@ def runClient(fp, data_dir, chain, start_only_coins):
signal.CTRL_C_EVENT if os.name == "nt" else signal.SIGINT
)
except Exception as e:
swap_client.log.info("Interrupting %d, error %s", d.handle.pid, str(e))
swap_client.log.info(f"Interrupting {d.handle.pid}, error {e}")
for d in daemons:
try:
d.handle.wait(timeout=120)
@ -541,8 +543,8 @@ def runClient(fp, data_dir, chain, start_only_coins):
if fp:
fp.close()
closed_pids.append(d.handle.pid)
except Exception as ex:
swap_client.log.error("Error: {}".format(ex))
except Exception as e:
swap_client.log.error(f"Error: {e}")
if os.path.exists(pids_path):
with open(pids_path) as fd:

View file

@ -149,7 +149,9 @@ def page_bid(self, url_split, post_string):
)
def page_bids(self, url_split, post_string, sent=False, available=False, received=False):
def page_bids(
self, url_split, post_string, sent=False, available=False, received=False
):
server = self.server
swap_client = server.swap_client
swap_client.checkSystemStatus()
@ -220,13 +222,19 @@ def page_bids(self, url_split, post_string, sent=False, available=False, receive
"summary": summary,
"filter_key": filter_key,
"bids": [
(format_timestamp(b[0]), b[2].hex(), b[3].hex(),
strBidState(b[5]), strTxState(b[7]),
strTxState(b[8]), b[11])
(
format_timestamp(b[0]),
b[2].hex(),
b[3].hex(),
strBidState(b[5]),
strTxState(b[7]),
strTxState(b[8]),
b[11],
)
for b in bids
],
"bids_count": len(bids),
}
},
)
sent_bids = swap_client.listBids(sent=True, filters=filters)