tlightning: separate thread for publish transaction - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 6ab8badb615db8d30d3631f1d3fbc6562bf6b7c7 DIR parent 277e5be229dd9baa7b055200c7f75dfd37197aaf HTML Author: Janus <ysangkok@gmail.com> Date: Mon, 19 Mar 2018 16:42:03 +0100 lightning: separate thread for publish transaction Diffstat: M lib/lightning.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) --- DIR diff --git a/lib/lightning.py b/lib/lightning.py t@@ -478,12 +478,21 @@ def signOutputRaw(tx, signDesc): async def PublishTransaction(json): req = rpc_pb2.PublishTransactionRequest() json_format.Parse(json, req) - global NETWORK + global NETWORK, globLock tx = transaction.Transaction(binascii.hexlify(req.tx).decode("utf-8")) - suc, has = NETWORK.broadcast(tx) + def target(tx, NETWORK, globLock): + globLock.acquire() + try: + res = NETWORK.broadcast(tx) + print("PUBLISH TRANSACTION IN SEPARATE THREAD PRODUCED", res) + except: + traceback.print_exc() + finally: + globLock.release() + threading.Thread(target=target, args=(tx, NETWORK, globLock)).start() m = rpc_pb2.PublishTransactionResponse() - m.success = suc - m.error = str(has) if not suc else "" + m.success = True + m.error = "" if m.error: print("PublishTransaction", m.error) if "Missing inputs" in m.error: t@@ -724,7 +733,10 @@ async def readJson(reader): except TimeoutError: continue +globLock = None + async def readReqAndReply(obj, writer, netAndWalLock): + global globLock methods = [ # SecretKeyRing DerivePrivKey, t@@ -753,6 +765,7 @@ async def readReqAndReply(obj, writer, netAndWalLock): if method.__name__ == obj["method"]: params = obj["params"][0] print("calling method", obj["method"], "with", params) + globLock = netAndWalLock netAndWalLock.acquire() if asyncio.iscoroutinefunction(method): result = await method(params)