aboutsummaryrefslogtreecommitdiff
path: root/src/rpc
diff options
context:
space:
mode:
authorRyan Ofsky <ryan@ofsky.org>2024-09-25 10:45:34 +0200
committerMarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>2024-10-01 09:10:54 +0200
commit5ca28ef28bcca1775ff49921fc2528d9439b71ab (patch)
tree7a865789490603907cfa72e1462aa2a10569c54e /src/rpc
parentfad8e7fba7bf2c523a191309d392cab79668264b (diff)
refactor: Split up NodeContext shutdown_signal and shutdown_request
Instead of having a single NodeContext::shutdown member that is used both to request shutdowns and check if they have been requested, use separate members for each. Benefits of this change: 1. Should make code a little clearer and easier to search because it is easier to see which parts of code are triggering shutdowns and which parts are just checking to see if they were triggered. 2. Makes it possible for init.cpp to specify additional code to run when a shutdown is requested, like signalling the m_tip_block_cv condition variable. Motivation for this change was to remove hacky NodeContext argument and m_tip_block_cv access from the StopRPC function, so StopRPC can just be concerned with RPC functionality, not other node functionality.
Diffstat (limited to 'src/rpc')
-rw-r--r--src/rpc/server.cpp7
-rw-r--r--src/rpc/server.h3
2 files changed, 3 insertions, 7 deletions
diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp
index ab2135a919..6c844ffc8f 100644
--- a/src/rpc/server.cpp
+++ b/src/rpc/server.cpp
@@ -169,7 +169,7 @@ static RPCHelpMan stop()
{
// Event loop will exit after current HTTP requests have been handled, so
// this reply will get back to the client.
- CHECK_NONFATAL((*CHECK_NONFATAL(EnsureAnyNodeContext(jsonRequest.context).shutdown))());
+ CHECK_NONFATAL((CHECK_NONFATAL(EnsureAnyNodeContext(jsonRequest.context).shutdown_request))());
if (jsonRequest.params[0].isNum()) {
UninterruptibleSleep(std::chrono::milliseconds{jsonRequest.params[0].getInt<int>()});
}
@@ -294,7 +294,7 @@ void InterruptRPC()
});
}
-void StopRPC(const std::any& context)
+void StopRPC()
{
static std::once_flag g_rpc_stop_flag;
// This function could be called twice if the GUI has been started with -server=1.
@@ -303,9 +303,6 @@ void StopRPC(const std::any& context)
LogDebug(BCLog::RPC, "Stopping RPC\n");
WITH_LOCK(g_deadline_timers_mutex, deadlineTimers.clear());
DeleteAuthCookie();
- node::NodeContext& node = EnsureAnyNodeContext(context);
- // The notifications interface doesn't exist between initialization step 4a and 7.
- if (node.notifications) WITH_LOCK(node.notifications->m_tip_block_mutex, node.notifications->m_tip_block_cv.notify_all());
LogDebug(BCLog::RPC, "RPC stopped.\n");
});
}
diff --git a/src/rpc/server.h b/src/rpc/server.h
index a8896d4247..5a22279a58 100644
--- a/src/rpc/server.h
+++ b/src/rpc/server.h
@@ -9,7 +9,6 @@
#include <rpc/request.h>
#include <rpc/util.h>
-#include <any>
#include <functional>
#include <map>
#include <stdint.h>
@@ -173,7 +172,7 @@ extern CRPCTable tableRPC;
void StartRPC();
void InterruptRPC();
-void StopRPC(const std::any& context);
+void StopRPC();
UniValue JSONRPCExec(const JSONRPCRequest& jreq, bool catch_errors);
#endif // BITCOIN_RPC_SERVER_H