Page MenuHomePhabricator

D2266.id6546.diff
No OneTemporary

D2266.id6546.diff

diff --git a/src/validationinterface.h b/src/validationinterface.h
--- a/src/validationinterface.h
+++ b/src/validationinterface.h
@@ -8,6 +8,7 @@
#include "primitives/transaction.h" // CTransaction(Ref)
+#include <functional>
#include <memory>
class CBlock;
@@ -31,6 +32,16 @@
void UnregisterValidationInterface(CValidationInterface *pwalletIn);
/** Unregister all wallets from core */
void UnregisterAllValidationInterfaces();
+/**
+ * Pushes a function to callback onto the notification queue, guaranteeing any
+ * callbacks generated prior to now are finished when the function is called.
+ *
+ * Be very careful blocking on func to be called if any locks are held -
+ * validation interface clients may not be able to make progress as they often
+ * wait for things like cs_main, so blocking until func is called with cs_main
+ * will result in a deadlock (that DEBUG_LOCKORDER will miss).
+ */
+void CallFunctionInValidationInterfaceQueue(std::function<void()> func);
class CValidationInterface {
protected:
@@ -110,6 +121,8 @@
friend void ::RegisterValidationInterface(CValidationInterface *);
friend void ::UnregisterValidationInterface(CValidationInterface *);
friend void ::UnregisterAllValidationInterfaces();
+ friend void ::CallFunctionInValidationInterfaceQueue(
+ std::function<void()> func);
void MempoolEntryRemoved(CTransactionRef tx, MemPoolRemovalReason reason);
diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp
--- a/src/validationinterface.cpp
+++ b/src/validationinterface.cpp
@@ -136,6 +136,10 @@
g_signals.m_internals->NewPoWValidBlock.disconnect_all_slots();
}
+void CallFunctionInValidationInterfaceQueue(std::function<void()> func) {
+ g_signals.m_internals->m_schedulerClient.AddToProcessQueue(std::move(func));
+}
+
void CMainSignals::MempoolEntryRemoved(CTransactionRef ptx,
MemPoolRemovalReason reason) {
if (reason != MemPoolRemovalReason::BLOCK &&

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 26, 10:25 (9 m, 54 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5570422
Default Alt Text
D2266.id6546.diff (1 KB)

Event Timeline