Skip to content

Commit 6dd469a

Browse files
Disconnect BlockNotifyGenesisWait and RPCNotifyBlockChange properly. Remove no-op CClientUIInterface::[signal_name]_disconnect.
1 parent 0baf4b1 commit 6dd469a

File tree

3 files changed

+7
-10
lines changed

3 files changed

+7
-10
lines changed

src/init.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,14 +339,15 @@ static void registerSignalHandler(int signal, void(*handler)(int))
339339
}
340340
#endif
341341

342+
static boost::signals2::connection rpc_notify_block_change_connection;
342343
static void OnRPCStarted()
343344
{
344-
uiInterface.NotifyBlockTip_connect(&RPCNotifyBlockChange);
345+
rpc_notify_block_change_connection = uiInterface.NotifyBlockTip_connect(&RPCNotifyBlockChange);
345346
}
346347

347348
static void OnRPCStopped()
348349
{
349-
uiInterface.NotifyBlockTip_disconnect(&RPCNotifyBlockChange);
350+
rpc_notify_block_change_connection.disconnect();
350351
RPCNotifyBlockChange(false, nullptr);
351352
g_best_block_cv.notify_all();
352353
LogPrint(BCLog::RPC, "RPC stopped.\n");
@@ -1687,8 +1688,9 @@ bool AppInitMain(InitInterfaces& interfaces)
16871688

16881689
// Either install a handler to notify us when genesis activates, or set fHaveGenesis directly.
16891690
// No locking, as this happens before any background thread is started.
1691+
boost::signals2::connection block_notify_genesis_wait_connection;
16901692
if (chainActive.Tip() == nullptr) {
1691-
uiInterface.NotifyBlockTip_connect(BlockNotifyGenesisWait);
1693+
block_notify_genesis_wait_connection = uiInterface.NotifyBlockTip_connect(BlockNotifyGenesisWait);
16921694
} else {
16931695
fHaveGenesis = true;
16941696
}
@@ -1712,7 +1714,7 @@ bool AppInitMain(InitInterfaces& interfaces)
17121714
while (!fHaveGenesis && !ShutdownRequested()) {
17131715
g_genesis_wait_cv.wait_for(lock, std::chrono::milliseconds(500));
17141716
}
1715-
uiInterface.NotifyBlockTip_disconnect(BlockNotifyGenesisWait);
1717+
block_notify_genesis_wait_connection.disconnect();
17161718
}
17171719

17181720
if (ShutdownRequested()) {

src/ui_interface.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@ struct UISignals {
2828
boost::signals2::connection CClientUIInterface::signal_name##_connect(std::function<signal_name##Sig> fn) \
2929
{ \
3030
return g_ui_signals.signal_name.connect(fn); \
31-
} \
32-
void CClientUIInterface::signal_name##_disconnect(std::function<signal_name##Sig> fn) \
33-
{ \
34-
return g_ui_signals.signal_name.disconnect(&fn); \
3531
}
3632

3733
ADD_SIGNALS_IMPL_WRAPPER(ThreadSafeMessageBox);

src/ui_interface.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ class CClientUIInterface
8181
#define ADD_SIGNALS_DECL_WRAPPER(signal_name, rtype, ...) \
8282
rtype signal_name(__VA_ARGS__); \
8383
using signal_name##Sig = rtype(__VA_ARGS__); \
84-
boost::signals2::connection signal_name##_connect(std::function<signal_name##Sig> fn); \
85-
void signal_name##_disconnect(std::function<signal_name##Sig> fn);
84+
boost::signals2::connection signal_name##_connect(std::function<signal_name##Sig> fn);
8685

8786
/** Show message box. */
8887
ADD_SIGNALS_DECL_WRAPPER(ThreadSafeMessageBox, bool, const std::string& message, const std::string& caption, unsigned int style);

0 commit comments

Comments
 (0)