Skip to content

Commit 8ed4ff8

Browse files
committed
refactor: Declare g_zmq_notification_interface as unique_ptr
Ensures better memory safety for this global. This came up during discussion of the following commit, but is not strictly required for its implementation.
1 parent 883766f commit 8ed4ff8

File tree

3 files changed

+8
-9
lines changed

3 files changed

+8
-9
lines changed

src/init.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,8 @@ void Shutdown(NodeContext& node)
328328

329329
#if ENABLE_ZMQ
330330
if (g_zmq_notification_interface) {
331-
UnregisterValidationInterface(g_zmq_notification_interface);
332-
delete g_zmq_notification_interface;
333-
g_zmq_notification_interface = nullptr;
331+
UnregisterValidationInterface(g_zmq_notification_interface.get());
332+
g_zmq_notification_interface.reset();
334333
}
335334
#endif
336335

@@ -1428,7 +1427,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
14281427
g_zmq_notification_interface = CZMQNotificationInterface::Create();
14291428

14301429
if (g_zmq_notification_interface) {
1431-
RegisterValidationInterface(g_zmq_notification_interface);
1430+
RegisterValidationInterface(g_zmq_notification_interface.get());
14321431
}
14331432
#endif
14341433

src/zmq/zmqnotificationinterface.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ std::list<const CZMQAbstractNotifier*> CZMQNotificationInterface::GetActiveNotif
3939
return result;
4040
}
4141

42-
CZMQNotificationInterface* CZMQNotificationInterface::Create()
42+
std::unique_ptr<CZMQNotificationInterface> CZMQNotificationInterface::Create()
4343
{
4444
std::map<std::string, CZMQNotifierFactory> factories;
4545
factories["pubhashblock"] = CZMQAbstractNotifier::Create<CZMQPublishHashBlockNotifier>;
@@ -68,7 +68,7 @@ CZMQNotificationInterface* CZMQNotificationInterface::Create()
6868
notificationInterface->notifiers = std::move(notifiers);
6969

7070
if (notificationInterface->Initialize()) {
71-
return notificationInterface.release();
71+
return notificationInterface;
7272
}
7373
}
7474

@@ -198,4 +198,4 @@ void CZMQNotificationInterface::BlockDisconnected(const std::shared_ptr<const CB
198198
});
199199
}
200200

201-
CZMQNotificationInterface* g_zmq_notification_interface = nullptr;
201+
std::unique_ptr<CZMQNotificationInterface> g_zmq_notification_interface;

src/zmq/zmqnotificationinterface.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class CZMQNotificationInterface final : public CValidationInterface
2323

2424
std::list<const CZMQAbstractNotifier*> GetActiveNotifiers() const;
2525

26-
static CZMQNotificationInterface* Create();
26+
static std::unique_ptr<CZMQNotificationInterface> Create();
2727

2828
protected:
2929
bool Initialize();
@@ -43,6 +43,6 @@ class CZMQNotificationInterface final : public CValidationInterface
4343
std::list<std::unique_ptr<CZMQAbstractNotifier>> notifiers;
4444
};
4545

46-
extern CZMQNotificationInterface* g_zmq_notification_interface;
46+
extern std::unique_ptr<CZMQNotificationInterface> g_zmq_notification_interface;
4747

4848
#endif // BITCOIN_ZMQ_ZMQNOTIFICATIONINTERFACE_H

0 commit comments

Comments
 (0)