/tmp/bitcoin/src/ipc/libmultiprocess/include/mp/proxy-io.h
Line | Count | Source |
1 | | // Copyright (c) The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #ifndef MP_PROXY_IO_H |
6 | | #define MP_PROXY_IO_H |
7 | | |
8 | | #include <mp/proxy.h> |
9 | | #include <mp/util.h> |
10 | | |
11 | | #include <mp/proxy.capnp.h> |
12 | | |
13 | | #include <capnp/rpc-twoparty.h> |
14 | | |
15 | | #include <assert.h> |
16 | | #include <condition_variable> |
17 | | #include <functional> |
18 | | #include <kj/function.h> |
19 | | #include <map> |
20 | | #include <memory> |
21 | | #include <optional> |
22 | | #include <sstream> |
23 | | #include <string> |
24 | | #include <thread> |
25 | | |
26 | | namespace mp { |
27 | | struct ThreadContext; |
28 | | |
29 | | struct InvokeContext |
30 | | { |
31 | | Connection& connection; |
32 | | }; |
33 | | |
34 | | struct ClientInvokeContext : InvokeContext |
35 | | { |
36 | | ThreadContext& thread_context; |
37 | | ClientInvokeContext(Connection& conn, ThreadContext& thread_context) |
38 | 43 | : InvokeContext{conn}, thread_context{thread_context} |
39 | 43 | { |
40 | 43 | } |
41 | | }; |
42 | | |
43 | | template <typename ProxyServer, typename CallContext_> |
44 | | struct ServerInvokeContext : InvokeContext |
45 | | { |
46 | | using CallContext = CallContext_; |
47 | | |
48 | | ProxyServer& proxy_server; |
49 | | CallContext& call_context; |
50 | | int req; |
51 | | //! For IPC methods that execute asynchronously, not on the event-loop |
52 | | //! thread: lock preventing the event-loop thread from freeing the params or |
53 | | //! results structs if the request is canceled while the worker thread is |
54 | | //! reading params (`call_context.getParams()`) or writing results |
55 | | //! (`call_context.getResults()`). |
56 | | Lock* cancel_lock{nullptr}; |
57 | | //! For IPC methods that execute asynchronously, not on the event-loop |
58 | | //! thread, this is set to true if the IPC call was canceled by the client |
59 | | //! or canceled by a disconnection. If the call runs on the event-loop |
60 | | //! thread, it can't be canceled. This should be accessed with cancel_lock |
61 | | //! held if it is not null, since in the asynchronous case it is accessed |
62 | | //! from multiple threads. |
63 | | bool request_canceled{false}; |
64 | | |
65 | | ServerInvokeContext(ProxyServer& proxy_server, CallContext& call_context, int req) |
66 | 69 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} |
67 | 69 | { |
68 | 69 | } mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::AddParams, gen::FooInterface::AddResults>>::ServerInvokeContext(mp::ProxyServer<gen::FooInterface>&, capnp::CallContext<gen::FooInterface::AddParams, gen::FooInterface::AddResults>&, int) Line | Count | Source | 66 | 1 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 1 | { | 68 | 1 | } |
mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>>::ServerInvokeContext(mp::ProxyServer<gen::FooInterface>&, capnp::CallContext<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>&, int) Line | Count | Source | 66 | 1 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 1 | { | 68 | 1 | } |
mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>>::ServerInvokeContext(mp::ProxyServer<gen::FooInterface>&, capnp::CallContext<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>&, int) Line | Count | Source | 66 | 1 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 1 | { | 68 | 1 | } |
mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>>::ServerInvokeContext(mp::ProxyServer<gen::FooInterface>&, capnp::CallContext<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>&, int) Line | Count | Source | 66 | 1 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 1 | { | 68 | 1 | } |
mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults>>::ServerInvokeContext(mp::ProxyServer<gen::FooInterface>&, capnp::CallContext<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults>&, int) Line | Count | Source | 66 | 1 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 1 | { | 68 | 1 | } |
mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults>>::ServerInvokeContext(mp::ProxyServer<gen::FooInterface>&, capnp::CallContext<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults>&, int) Line | Count | Source | 66 | 1 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 1 | { | 68 | 1 | } |
mp::ServerInvokeContext<mp::ProxyServer<gen::FooInterface>, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>>::ServerInvokeContext(mp::ProxyServer<gen::FooInterface>&, capnp::CallContext<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>&, int) Line | Count | Source | 66 | 1 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 1 | { | 68 | 1 | } |
mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Init>&, capnp::CallContext<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults>&, int) Line | Count | Source | 66 | 10 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 10 | { | 68 | 10 | } |
mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Init>&, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>&, int) Line | Count | Source | 66 | 12 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 12 | { | 68 | 12 | } |
Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Init>&, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Init>&, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>&, int) mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Init>&, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>&, int) Line | Count | Source | 66 | 8 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 8 | { | 68 | 8 | } |
Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Mining>&, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>&, int) Unexecuted instantiation: mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults>&, int) mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Rpc>&, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>&, int) Line | Count | Source | 66 | 8 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 8 | { | 68 | 8 | } |
mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Echo>&, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>&, int) Line | Count | Source | 66 | 12 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 12 | { | 68 | 12 | } |
mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::Echo>&, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>&, int) Line | Count | Source | 66 | 12 | : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req} | 67 | 12 | { | 68 | 12 | } |
|
69 | | }; |
70 | | |
71 | | template <typename Interface, typename Params, typename Results> |
72 | | using ServerContext = ServerInvokeContext<ProxyServer<Interface>, ::capnp::CallContext<Params, Results>>; |
73 | | |
74 | | template <> |
75 | | struct ProxyClient<Thread> : public ProxyClientBase<Thread, ::capnp::Void> |
76 | | { |
77 | | using ProxyClientBase::ProxyClientBase; |
78 | | // https://stackoverflow.com/questions/22357887/comparing-two-mapiterators-why-does-it-need-the-copy-constructor-of-stdpair |
79 | | ProxyClient(const ProxyClient&) = delete; |
80 | | ~ProxyClient(); |
81 | | |
82 | | //! Reference to callback function that is run if there is a sudden |
83 | | //! disconnect and the Connection object is destroyed before this |
84 | | //! ProxyClient<Thread> object. The callback will destroy this object and |
85 | | //! remove its entry from the thread's request_threads or callback_threads |
86 | | //! map. It will also reset m_disconnect_cb so the destructor does not |
87 | | //! access it. In the normal case where there is no sudden disconnect, the |
88 | | //! destructor will unregister m_disconnect_cb so the callback is never run. |
89 | | //! Since this variable is accessed from multiple threads, accesses should |
90 | | //! be guarded with the associated Waiter::m_mutex. |
91 | | std::optional<CleanupIt> m_disconnect_cb; |
92 | | }; |
93 | | |
94 | | template <> |
95 | | struct ProxyServer<Thread> final : public Thread::Server |
96 | | { |
97 | | public: |
98 | | ProxyServer(Connection& connection, ThreadContext& thread_context, std::thread&& thread); |
99 | | ~ProxyServer(); |
100 | | kj::Promise<void> getName(GetNameContext context) override; |
101 | | |
102 | | //! Run a callback function fn returning T on this thread. The function will |
103 | | //! be queued and executed as soon as the thread is idle, and when fn |
104 | | //! returns, the promise returned by this method will be fulfilled with the |
105 | | //! value fn returned. |
106 | | template<typename T, typename Fn> |
107 | | kj::Promise<T> post(Fn&& fn); |
108 | | |
109 | | EventLoopRef m_loop; |
110 | | ThreadContext& m_thread_context; |
111 | | std::thread m_thread; |
112 | | //! Promise signaled when m_thread_context.waiter is ready and there is no |
113 | | //! post() callback function waiting to execute. |
114 | | kj::Promise<void> m_thread_ready{kj::READY_NOW}; |
115 | | }; |
116 | | |
117 | | //! Handler for kj::TaskSet failed task events. |
118 | | class LoggingErrorHandler : public kj::TaskSet::ErrorHandler |
119 | | { |
120 | | public: |
121 | 30 | LoggingErrorHandler(EventLoop& loop) : m_loop(loop) {} |
122 | | void taskFailed(kj::Exception&& exception) override; |
123 | | EventLoop& m_loop; |
124 | | }; |
125 | | |
126 | | //! Log flags. Update stringify function if changed! |
127 | | enum class Log { |
128 | | Trace = 0, |
129 | | Debug, |
130 | | Info, |
131 | | Warning, |
132 | | Error, |
133 | | Raise, |
134 | | }; |
135 | | |
136 | | kj::StringPtr KJ_STRINGIFY(Log flags); |
137 | | |
138 | | struct LogMessage { |
139 | | |
140 | | //! Message to be logged |
141 | | std::string message; |
142 | | |
143 | | //! The severity level of this message |
144 | | Log level; |
145 | | }; |
146 | | |
147 | | using LogFn = std::function<void(LogMessage)>; |
148 | | |
149 | | struct LogOptions { |
150 | | |
151 | | //! External logging callback. |
152 | | LogFn log_fn; |
153 | | |
154 | | //! Maximum number of characters to use when representing |
155 | | //! request and response structs as strings. |
156 | | size_t max_chars{200}; |
157 | | |
158 | | //! Messages with a severity level less than log_level will not be |
159 | | //! reported. |
160 | | Log log_level{Log::Trace}; |
161 | | }; |
162 | | |
163 | | class Logger |
164 | | { |
165 | | public: |
166 | 743 | Logger(const LogOptions& options, Log log_level) : m_options(options), m_log_level(log_level) {} |
167 | | |
168 | | Logger(Logger&&) = delete; |
169 | | Logger& operator=(Logger&&) = delete; |
170 | | Logger(const Logger&) = delete; |
171 | | Logger& operator=(const Logger&) = delete; |
172 | | |
173 | | ~Logger() noexcept(false) |
174 | 743 | { |
175 | 743 | if (enabled()) m_options.log_fn({std::move(m_buffer).str(), m_log_level}); |
176 | 743 | } |
177 | | |
178 | | template <typename T> |
179 | | friend Logger& operator<<(Logger& logger, T&& value) |
180 | 3.58k | { |
181 | 3.58k | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); |
182 | 3.58k | return logger; |
183 | 3.58k | } mp::Logger& mp::operator<<<mp::ProxyClientBase<gen::FooInterface, FooImplementation>*>(mp::Logger&, mp::ProxyClientBase<gen::FooInterface, FooImplementation>*&&) Line | Count | Source | 180 | 3 | { | 181 | 3 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 3 | return logger; | 183 | 3 | } |
mp::Logger& mp::operator<<<char const (&) [2]>(mp::Logger&, char const (&) [2]) Line | Count | Source | 180 | 905 | { | 181 | 905 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 905 | return logger; | 183 | 905 | } |
mp::Logger& mp::operator<<<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>(mp::Logger&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&&) Line | Count | Source | 180 | 908 | { | 181 | 908 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 908 | return logger; | 183 | 908 | } |
mp::Logger& mp::operator<<<char const (&) [10]>(mp::Logger&, char const (&) [10]) Line | Count | Source | 180 | 72 | { | 181 | 72 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 72 | return logger; | 183 | 72 | } |
mp::Logger& mp::operator<<<char const (&) [3]>(mp::Logger&, char const (&) [3]) Line | Count | Source | 180 | 536 | { | 181 | 536 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 536 | return logger; | 183 | 536 | } |
Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [55]>(mp::Logger&, char const (&) [55]) mp::Logger& mp::operator<<<mp::ProxyServerBase<gen::FooInterface, FooImplementation>*>(mp::Logger&, mp::ProxyServerBase<gen::FooInterface, FooImplementation>*&&) Line | Count | Source | 180 | 3 | { | 181 | 3 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 3 | return logger; | 183 | 3 | } |
mp::Logger& mp::operator<<<char const (&) [13]>(mp::Logger&, char const (&) [13]) Line | Count | Source | 180 | 72 | { | 181 | 72 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 72 | return logger; | 183 | 72 | } |
mp::Logger& mp::operator<<<char const (&) [12]>(mp::Logger&, char const (&) [12]) Line | Count | Source | 180 | 134 | { | 181 | 134 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 134 | return logger; | 183 | 134 | } |
mp::Logger& mp::operator<<<char const (&) [68]>(mp::Logger&, char const (&) [68]) Line | Count | Source | 180 | 5 | { | 181 | 5 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 5 | return logger; | 183 | 5 | } |
mp::Logger& mp::operator<<<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>(mp::Logger&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&) Line | Count | Source | 180 | 93 | { | 181 | 93 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 93 | return logger; | 183 | 93 | } |
mp::Logger& mp::operator<<<char const*>(mp::Logger&, char const*&&) Line | Count | Source | 180 | 148 | { | 181 | 148 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 148 | return logger; | 183 | 148 | } |
mp::Logger& mp::operator<<<char const (&) [19]>(mp::Logger&, char const (&) [19]) Line | Count | Source | 180 | 62 | { | 181 | 62 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 62 | return logger; | 183 | 62 | } |
Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [24]>(mp::Logger&, char const (&) [24]) Unexecuted instantiation: mp::Logger& mp::operator<<<char const*&>(mp::Logger&, char const*&) mp::Logger& mp::operator<<<char const (&) [20]>(mp::Logger&, char const (&) [20]) Line | Count | Source | 180 | 34 | { | 181 | 34 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 34 | return logger; | 183 | 34 | } |
mp::Logger& mp::operator<<<int&>(mp::Logger&, int&) Line | Count | Source | 180 | 95 | { | 181 | 95 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 95 | return logger; | 183 | 95 | } |
mp::Logger& mp::operator<<<char const (&) [27]>(mp::Logger&, char const (&) [27]) Line | Count | Source | 180 | 112 | { | 181 | 112 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 112 | return logger; | 183 | 112 | } |
mp::Logger& mp::operator<<<char const (&) [15]>(mp::Logger&, char const (&) [15]) Line | Count | Source | 180 | 43 | { | 181 | 43 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 43 | return logger; | 183 | 43 | } |
mp::Logger& mp::operator<<<int const&>(mp::Logger&, int const&) Line | Count | Source | 180 | 43 | { | 181 | 43 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 43 | return logger; | 183 | 43 | } |
mp::Logger& mp::operator<<<char const (&) [16]>(mp::Logger&, char const (&) [16]) Line | Count | Source | 180 | 43 | { | 181 | 43 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 43 | return logger; | 183 | 43 | } |
mp::Logger& mp::operator<<<char const (&) [31]>(mp::Logger&, char const (&) [31]) Line | Count | Source | 180 | 26 | { | 181 | 26 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 26 | return logger; | 183 | 26 | } |
mp::Logger& mp::operator<<<char const (&) [33]>(mp::Logger&, char const (&) [33]) Line | Count | Source | 180 | 10 | { | 181 | 10 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 10 | return logger; | 183 | 10 | } |
Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [43]>(mp::Logger&, char const (&) [43]) mp::Logger& mp::operator<<<mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>*>(mp::Logger&, mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>*&&) Line | Count | Source | 180 | 18 | { | 181 | 18 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 18 | return logger; | 183 | 18 | } |
mp::Logger& mp::operator<<<mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>*>(mp::Logger&, mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>*&&) Line | Count | Source | 180 | 30 | { | 181 | 30 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 30 | return logger; | 183 | 30 | } |
mp::Logger& mp::operator<<<char const (&) [30]>(mp::Logger&, char const (&) [30]) Line | Count | Source | 180 | 10 | { | 181 | 10 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 10 | return logger; | 183 | 10 | } |
mp::Logger& mp::operator<<<mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>*>(mp::Logger&, mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>*&&) Line | Count | Source | 180 | 18 | { | 181 | 18 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 18 | return logger; | 183 | 18 | } |
Unexecuted instantiation: mp::Logger& mp::operator<<<mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>*>(mp::Logger&, mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>*&&) Unexecuted instantiation: mp::Logger& mp::operator<<<mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>*>(mp::Logger&, mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>*&&) Unexecuted instantiation: mp::Logger& mp::operator<<<mp::ProxyServerBase<ipc::capnp::messages::Mining, interfaces::Mining>*>(mp::Logger&, mp::ProxyServerBase<ipc::capnp::messages::Mining, interfaces::Mining>*&&) Unexecuted instantiation: mp::Logger& mp::operator<<<mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>*>(mp::Logger&, mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>*&&) Unexecuted instantiation: mp::Logger& mp::operator<<<mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>*>(mp::Logger&, mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>*&&) mp::Logger& mp::operator<<<mp::ProxyServerBase<ipc::capnp::messages::Rpc, interfaces::Rpc>*>(mp::Logger&, mp::ProxyServerBase<ipc::capnp::messages::Rpc, interfaces::Rpc>*&&) Line | Count | Source | 180 | 12 | { | 181 | 12 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 12 | return logger; | 183 | 12 | } |
mp::Logger& mp::operator<<<mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>*>(mp::Logger&, mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>*&&) Line | Count | Source | 180 | 18 | { | 181 | 18 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 18 | return logger; | 183 | 18 | } |
Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [45]>(mp::Logger&, char const (&) [45]) Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [38]>(mp::Logger&, char const (&) [38]) mp::Logger& mp::operator<<<char const (&) [21]>(mp::Logger&, char const (&) [21]) Line | Count | Source | 180 | 8 | { | 181 | 8 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 8 | return logger; | 183 | 8 | } |
Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [22]>(mp::Logger&, char const (&) [22]) Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [36]>(mp::Logger&, char const (&) [36]) Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [134]>(mp::Logger&, char const (&) [134]) mp::Logger& mp::operator<<<mp::ProxyClientBase<mp::Thread, capnp::Void>*>(mp::Logger&, mp::ProxyClientBase<mp::Thread, capnp::Void>*&&) Line | Count | Source | 180 | 114 | { | 181 | 114 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 114 | return logger; | 183 | 114 | } |
Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [39]>(mp::Logger&, char const (&) [39]) Unexecuted instantiation: mp::Logger& mp::operator<<<char const (&) [29]>(mp::Logger&, char const (&) [29]) mp::Logger& mp::operator<<<char const (&) [50]>(mp::Logger&, char const (&) [50]) Line | Count | Source | 180 | 8 | { | 181 | 8 | if (logger.enabled()) logger.m_buffer << std::forward<T>(value); | 182 | 8 | return logger; | 183 | 8 | } |
|
184 | | |
185 | | template <typename T> |
186 | | friend Logger& operator<<(Logger&& logger, T&& value) |
187 | | { |
188 | | return logger << std::forward<T>(value); |
189 | | } |
190 | | |
191 | | explicit operator bool() const |
192 | 743 | { |
193 | 743 | return enabled(); |
194 | 743 | } |
195 | | |
196 | | private: |
197 | | bool enabled() const |
198 | 5.06k | { |
199 | 5.06k | return m_options.log_fn && m_log_level >= m_options.log_level; |
200 | 5.06k | } |
201 | | |
202 | | const LogOptions& m_options; |
203 | | Log m_log_level; |
204 | | std::ostringstream m_buffer; |
205 | | }; |
206 | | |
207 | 4.32k | #define MP_LOGPLAIN(loop, ...) if (mp::Logger logger{(loop).m_log_opts, __VA_ARGS__}; logger) logger |
208 | | |
209 | 566 | #define MP_LOG(loop, ...) MP_LOGPLAIN(loop, __VA_ARGS__) << "{" << LongThreadName((loop).m_exe_name) << "} " |
210 | | |
211 | | std::string LongThreadName(const char* exe_name); |
212 | | |
213 | | //! Event loop implementation. |
214 | | //! |
215 | | //! Cap'n Proto threading model is very simple: all I/O operations are |
216 | | //! asynchronous and must be performed on a single thread. This includes: |
217 | | //! |
218 | | //! - Code starting an asynchronous operation (calling a function that returns a |
219 | | //! promise object) |
220 | | //! - Code notifying that an asynchronous operation is complete (code using a |
221 | | //! fulfiller object) |
222 | | //! - Code handling a completed operation (code chaining or waiting for a promise) |
223 | | //! |
224 | | //! All of this code needs to access shared state, and there is no mutex that |
225 | | //! can be acquired to lock this state because Cap'n Proto |
226 | | //! assumes it will only be accessed from one thread. So all this code needs to |
227 | | //! actually run on one thread, and the EventLoop::loop() method is the entry point for |
228 | | //! this thread. ProxyClient and ProxyServer objects that use other threads and |
229 | | //! need to perform I/O operations post to this thread using EventLoop::post() |
230 | | //! and EventLoop::sync() methods. |
231 | | //! |
232 | | //! Specifically, because ProxyClient methods can be called from arbitrary |
233 | | //! threads, and ProxyServer methods can run on arbitrary threads, ProxyClient |
234 | | //! methods use the EventLoop thread to send requests, and ProxyServer methods |
235 | | //! use the thread to return results. |
236 | | //! |
237 | | //! Based on https://groups.google.com/d/msg/capnproto/TuQFF1eH2-M/g81sHaTAAQAJ |
238 | | class EventLoop |
239 | | { |
240 | | public: |
241 | | //! Construct event loop object with default logging options. |
242 | | EventLoop(const char* exe_name, LogFn log_fn, void* context = nullptr) |
243 | 1 | : EventLoop(exe_name, LogOptions{std::move(log_fn)}, context){} |
244 | | |
245 | | //! Construct event loop object with specified logging options. |
246 | | EventLoop(const char* exe_name, LogOptions log_opts, void* context = nullptr); |
247 | | |
248 | | //! Backwards-compatible constructor for previous (deprecated) logging callback signature |
249 | | EventLoop(const char* exe_name, std::function<void(bool, std::string)> old_callback, void* context = nullptr) |
250 | 1 | : EventLoop(exe_name, |
251 | 67 | LogFn{[old_callback = std::move(old_callback)](LogMessage log_data) {old_callback(log_data.level == Log::Raise, std::move(log_data.message));}}, |
252 | 1 | context){} |
253 | | |
254 | | ~EventLoop(); |
255 | | |
256 | | //! Run event loop. Does not return until shutdown. This should only be |
257 | | //! called once from the m_thread_id thread. This will block until |
258 | | //! the m_num_refs reference count is 0. |
259 | | void loop(); |
260 | | |
261 | | //! Run function on event loop thread. Does not return until function completes. |
262 | | //! Must be called while the loop() function is active. |
263 | | void post(kj::Function<void()> fn); |
264 | | |
265 | | //! Wrapper around EventLoop::post that takes advantage of the |
266 | | //! fact that callable will not go out of scope to avoid requirement that it |
267 | | //! be copyable. |
268 | | template <typename Callable> |
269 | | void sync(Callable&& callable) |
270 | 254 | { |
271 | 254 | post(std::forward<Callable>(callable)); |
272 | 254 | } void mp::EventLoop::sync<mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()>(mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::A, 1>, int>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::B, 1>, int>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 2>, int&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::A, 1>, int>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::B, 1>, int>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 2>, int&>&&)::'lambda'()>(mp::ProxyClient<gen::FooInterface>&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, COutPoint&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, COutPoint&>&&)::'lambda'()>(mp::ProxyClient<gen::FooInterface>&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, UniValue&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, UniValue&>&&)::'lambda'()>(mp::ProxyClient<gen::FooInterface>&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::shared_ptr<CTransaction const>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::shared_ptr<CTransaction const>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::shared_ptr<CTransaction const>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::shared_ptr<CTransaction const>&>&&)::'lambda'()>(mp::ProxyClient<gen::FooInterface>&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<char, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<char, std::allocator<char>>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<char, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<char, std::allocator<char>>&>&&)::'lambda'()>(mp::ProxyClient<gen::FooInterface>&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, CScript>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, CScript&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, CScript>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, CScript&>&&)::'lambda'()>(mp::ProxyClient<gen::FooInterface>&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda'()>(mp::ProxyClient<gen::FooInterface>&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<std::unique_ptr<mp::ProxyClient<ipc::capnp::messages::Init>, std::default_delete<mp::ProxyClient<ipc::capnp::messages::Init>>> mp::ConnectStream<ipc::capnp::messages::Init>(mp::EventLoop&, int)::'lambda'()>(ipc::capnp::messages::Init&&) Line | Count | Source | 270 | 10 | { | 271 | 10 | post(std::forward<Callable>(callable)); | 272 | 10 | } |
void mp::EventLoop::sync<mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()>(mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()&&) Line | Count | Source | 270 | 10 | { | 271 | 10 | post(std::forward<Callable>(callable)); | 272 | 10 | } |
void mp::EventLoop::sync<void mp::ListenConnections<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(void mp::ListenConnections<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&) Line | Count | Source | 270 | 3 | { | 271 | 3 | post(std::forward<Callable>(callable)); | 272 | 3 | } |
protocol.cpp:void mp::EventLoop::sync<ipc::capnp::(anonymous namespace)::CapnpProtocol::disconnectIncoming()::'lambda'()>(ipc::capnp::(anonymous namespace)::CapnpProtocol::disconnectIncoming()::'lambda'()&&) Line | Count | Source | 270 | 1 | { | 271 | 1 | post(std::forward<Callable>(callable)); | 272 | 1 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>, capnp::Request<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::ThreadMap, 19>>>(mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>&, capnp::Request<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::ThreadMap, 19>>&&)::'lambda'()>(mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>&&) Line | Count | Source | 270 | 10 | { | 271 | 10 | post(std::forward<Callable>(callable)); | 272 | 10 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Init>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()>(mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Init>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Init>&&) Unexecuted instantiation: void mp::EventLoop::sync<mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyClientBase(ipc::capnp::messages::Mining::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()>(mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyClientBase(ipc::capnp::messages::Mining::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()&&) void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Init>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyClientBase(ipc::capnp::messages::Rpc::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()>(mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyClientBase(ipc::capnp::messages::Rpc::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>, capnp::Request<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults> (ipc::capnp::messages::Echo::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>>(mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>&, capnp::Request<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults> (ipc::capnp::messages::Echo::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>&&)::'lambda'()>(mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Echo>, capnp::Request<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults> (ipc::capnp::messages::Echo::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::echo_fields::Echo, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>, mp::ClientParam<mp::Accessor<mp::echo_fields::Result, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::ProxyClient<ipc::capnp::messages::Echo>&, capnp::Request<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults> (ipc::capnp::messages::Echo::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::echo_fields::Echo, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&, mp::ClientParam<mp::Accessor<mp::echo_fields::Result, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Echo>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::init_fields::Context, 17>&&) void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 22>, std::optional<interfaces::BlockRef>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 22>, std::optional<interfaces::BlockRef>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256>, mp::ClientParam<mp::Accessor<mp::mining_fields::Timeout, 1>, std::chrono::duration<double, std::ratio<1l, 1000l>>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::optional<interfaces::BlockRef>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Timeout, 1>, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::optional<interfaces::BlockRef>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCreateOptions const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Cooldown, 1>, bool>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCreateOptions const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Cooldown, 1>, bool>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyClientBase(ipc::capnp::messages::BlockTemplate::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()>(mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyClientBase(ipc::capnp::messages::BlockTemplate::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCheckOptions const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCheckOptions const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Mining>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>>(mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&)::'lambda'()>(mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlockHeader&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlockHeader&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlock&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlock&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, node::CoinbaseTx&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, node::CoinbaseTx&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<uint256, std::allocator<uint256>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<uint256, std::allocator<uint256>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Version, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Timestamp, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Nonce, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Coinbase, 17>, std::shared_ptr<CTransaction const>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Version, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Timestamp, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Nonce, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Coinbase, 17>, std::shared_ptr<CTransaction const>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockWaitOptions>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockWaitOptions>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) void mp::EventLoop::sync<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Rpc>, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults> (ipc::capnp::messages::Rpc::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::rpc_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Uri, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::User, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Result, 18>, UniValue&>>(mp::ProxyClient<ipc::capnp::messages::Rpc>&, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults> (ipc::capnp::messages::Rpc::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::rpc_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Uri, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::User, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Result, 18>, UniValue&>&&)::'lambda'()>(mp::ProxyClient<ipc::capnp::messages::Rpc>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::rpc_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::rpc_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::rpc_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::rpc_fields::Context, 17>&&) Line | Count | Source | 270 | 4 | { | 271 | 4 | post(std::forward<Callable>(callable)); | 272 | 4 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda0'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)::operator()(mp::CancelMonitor&)::'lambda1'()::operator()() const::'lambda'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 270 | 6 | { | 271 | 6 | post(std::forward<Callable>(callable)); | 272 | 6 | } |
void mp::EventLoop::sync<mp::ProxyClientBase<mp::Thread, capnp::Void>::ProxyClientBase(mp::Thread::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()>(mp::ProxyClientBase<mp::Thread, capnp::Void>::ProxyClientBase(mp::Thread::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()&&) Line | Count | Source | 270 | 46 | { | 271 | 46 | post(std::forward<Callable>(callable)); | 272 | 46 | } |
proxy.cpp:void mp::EventLoop::sync<mp::ProxyClient<mp::Thread>::~ProxyClient()::$_0>(mp::ProxyClient<mp::Thread>::~ProxyClient()::$_0&&) Line | Count | Source | 270 | 26 | { | 271 | 26 | post(std::forward<Callable>(callable)); | 272 | 26 | } |
|
273 | | |
274 | | //! Register cleanup function to run on asynchronous worker thread without |
275 | | //! blocking the event loop thread. |
276 | | void addAsyncCleanup(std::function<void()> fn); |
277 | | |
278 | | //! Start asynchronous worker thread if necessary. This is only done if |
279 | | //! there are ProxyServerBase::m_impl objects that need to be destroyed |
280 | | //! asynchronously, without tying up the event loop thread. This can happen |
281 | | //! when an interface does not declare a destroy() method that would allow |
282 | | //! the client to wait for the destructor to finish and run it on a |
283 | | //! dedicated thread. It can also happen whenever this is a broken |
284 | | //! connection and the client is no longer around to call the destructors |
285 | | //! and the server objects need to be garbage collected. In both cases, it |
286 | | //! is important that ProxyServer::m_impl destructors do not run on the |
287 | | //! eventloop thread because they may need it to do I/O if they perform |
288 | | //! other IPC calls. |
289 | | void startAsyncThread() MP_REQUIRES(m_mutex); |
290 | | |
291 | | //! Check if loop should exit. |
292 | | bool done() const MP_REQUIRES(m_mutex); |
293 | | |
294 | | //! Process name included in thread names so combined debug output from |
295 | | //! multiple processes is easier to understand. |
296 | | const char* m_exe_name; |
297 | | |
298 | | //! ID of the event loop thread |
299 | | std::thread::id m_thread_id = std::this_thread::get_id(); |
300 | | |
301 | | //! Handle of an async worker thread. Joined on destruction. Unset if async |
302 | | //! method has not been called. |
303 | | std::thread m_async_thread; |
304 | | |
305 | | //! Callback function to run on event loop thread during post() or sync() call. |
306 | | kj::Function<void()>* m_post_fn MP_GUARDED_BY(m_mutex) = nullptr; |
307 | | |
308 | | //! Callback functions to run on async thread. |
309 | | std::optional<CleanupList> m_async_fns MP_GUARDED_BY(m_mutex); |
310 | | |
311 | | //! Pipe read handle used to wake up the event loop thread. |
312 | | int m_wait_fd = -1; |
313 | | |
314 | | //! Pipe write handle used to wake up the event loop thread. |
315 | | int m_post_fd = -1; |
316 | | |
317 | | //! Number of EventLoopRef instances referencing this event loop. This is a |
318 | | //! sum of the number of client and server objects (Connection, ProxyClient, |
319 | | //! ProxyServer) using the loop, plus temporary references held while |
320 | | //! posting functions to the loop, plus any references held by external code |
321 | | //! to keep the loop running. The loop() method exits when this count drops |
322 | | //! to 0 (and m_async_fns is empty). |
323 | | int m_num_refs MP_GUARDED_BY(m_mutex) = 0; |
324 | | |
325 | | //! Mutex and condition variable used to post tasks to event loop and async |
326 | | //! thread. |
327 | | Mutex m_mutex; |
328 | | std::condition_variable m_cv; |
329 | | |
330 | | //! Capnp IO context. |
331 | | kj::AsyncIoContext m_io_context; |
332 | | |
333 | | //! Capnp error handler. Needs to outlive m_task_set. |
334 | | LoggingErrorHandler m_error_handler{*this}; |
335 | | |
336 | | //! Capnp list of pending promises. |
337 | | std::unique_ptr<kj::TaskSet> m_task_set; |
338 | | |
339 | | //! List of connections. |
340 | | std::list<Connection> m_incoming_connections; |
341 | | |
342 | | //! Logging options |
343 | | LogOptions m_log_opts; |
344 | | |
345 | | //! External context pointer. |
346 | | void* m_context; |
347 | | |
348 | | //! Hook called when ProxyServer<ThreadMap>::makeThread() is called. |
349 | | std::function<void()> testing_hook_makethread; |
350 | | |
351 | | //! Hook called on the worker thread inside makeThread(), after the thread |
352 | | //! context is set up and thread_context promise is fulfilled, but before it |
353 | | //! starts waiting for requests. |
354 | | std::function<void()> testing_hook_makethread_created; |
355 | | |
356 | | //! Hook called on the worker thread when it starts to execute an async |
357 | | //! request. Used by tests to control timing or inject behavior at this |
358 | | //! point in execution. |
359 | | std::function<void()> testing_hook_async_request_start; |
360 | | |
361 | | //! Hook called on the worker thread just before returning results. |
362 | | std::function<void()> testing_hook_async_request_done; |
363 | | }; |
364 | | |
365 | | //! Single element task queue used to handle recursive capnp calls. (If the |
366 | | //! server makes a callback into the client in the middle of a request, while the client |
367 | | //! thread is blocked waiting for server response, this is what allows the |
368 | | //! client to run the request in the same thread, the same way code would run in a |
369 | | //! single process, with the callback sharing the same thread stack as the original |
370 | | //! call.) To support this, the clientInvoke function calls Waiter::wait() to |
371 | | //! block the client IPC thread while initial request is in progress. Then if |
372 | | //! there is a callback, it is executed with Waiter::post(). |
373 | | //! |
374 | | //! The Waiter class is also used server-side by `ProxyServer<Thread>::post()` |
375 | | //! to execute IPC calls on worker threads. |
376 | | struct Waiter |
377 | | { |
378 | 15 | Waiter() = default; |
379 | | |
380 | | template <typename Fn> |
381 | | bool post(Fn&& fn) |
382 | 26 | { |
383 | 26 | const Lock lock(m_mutex); |
384 | 26 | if (m_fn) return false; |
385 | 26 | m_fn = std::forward<Fn>(fn); |
386 | 26 | m_cv.notify_all(); |
387 | 26 | return true; |
388 | 26 | } bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 382 | 6 | { | 383 | 6 | const Lock lock(m_mutex); | 384 | 6 | if (m_fn) return false; | 385 | 6 | m_fn = std::forward<Fn>(fn); | 386 | 6 | m_cv.notify_all(); | 387 | 6 | return true; | 388 | 6 | } |
Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::init_fields::Context, 17>&&) Line | Count | Source | 382 | 4 | { | 383 | 4 | const Lock lock(m_mutex); | 384 | 4 | if (m_fn) return false; | 385 | 4 | m_fn = std::forward<Fn>(fn); | 386 | 4 | m_cv.notify_all(); | 387 | 4 | return true; | 388 | 4 | } |
Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) Unexecuted instantiation: bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::mining_fields::Context, 17>&&) bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::rpc_fields::Context, 17>&&) Line | Count | Source | 382 | 4 | { | 383 | 4 | const Lock lock(m_mutex); | 384 | 4 | if (m_fn) return false; | 385 | 4 | m_fn = std::forward<Fn>(fn); | 386 | 4 | m_cv.notify_all(); | 387 | 4 | return true; | 388 | 4 | } |
bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 382 | 6 | { | 383 | 6 | const Lock lock(m_mutex); | 384 | 6 | if (m_fn) return false; | 385 | 6 | m_fn = std::forward<Fn>(fn); | 386 | 6 | m_cv.notify_all(); | 387 | 6 | return true; | 388 | 6 | } |
bool mp::Waiter::post<kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()>(mp::Accessor<mp::echo_fields::Context, 17>&&) Line | Count | Source | 382 | 6 | { | 383 | 6 | const Lock lock(m_mutex); | 384 | 6 | if (m_fn) return false; | 385 | 6 | m_fn = std::forward<Fn>(fn); | 386 | 6 | m_cv.notify_all(); | 387 | 6 | return true; | 388 | 6 | } |
|
389 | | |
390 | | template <class Predicate> |
391 | | void wait(Lock& lock, Predicate pred) MP_REQUIRES(m_mutex) |
392 | 53 | { |
393 | 132 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { |
394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid |
395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent |
396 | | // after the fn() call and before the lock.lock() call in this loop |
397 | | // in the case where a capnp response is sent and a brand new |
398 | | // request is immediately received. |
399 | 158 | while (m_fn) { |
400 | 26 | auto fn = std::move(*m_fn); |
401 | 26 | m_fn.reset(); |
402 | 26 | Unlock(lock, fn); |
403 | 26 | } |
404 | 132 | const bool done = pred(); |
405 | 132 | return done; |
406 | 132 | }); void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::A, 1>, int>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::B, 1>, int>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 2>, int&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::A, 1>, int>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::B, 1>, int>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 2>, int&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>)::'lambda'()::operator()() const Line | Count | Source | 393 | 2 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 2 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 2 | const bool done = pred(); | 405 | 2 | return done; | 406 | 2 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, COutPoint&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, COutPoint&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>)::'lambda'()::operator()() const Line | Count | Source | 393 | 2 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 2 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 2 | const bool done = pred(); | 405 | 2 | return done; | 406 | 2 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, UniValue&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, UniValue&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>)::'lambda'()::operator()() const Line | Count | Source | 393 | 2 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 2 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 2 | const bool done = pred(); | 405 | 2 | return done; | 406 | 2 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::shared_ptr<CTransaction const>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::shared_ptr<CTransaction const>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::shared_ptr<CTransaction const>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::shared_ptr<CTransaction const>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>)::'lambda'()::operator()() const Line | Count | Source | 393 | 2 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 2 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 2 | const bool done = pred(); | 405 | 2 | return done; | 406 | 2 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<char, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<char, std::allocator<char>>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<char, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<char, std::allocator<char>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>)::'lambda'()::operator()() const Line | Count | Source | 393 | 2 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 2 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 2 | const bool done = pred(); | 405 | 2 | return done; | 406 | 2 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, CScript>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, CScript&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, CScript>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, CScript&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>)::'lambda'()::operator()() const Line | Count | Source | 393 | 2 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 2 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 2 | const bool done = pred(); | 405 | 2 | return done; | 406 | 2 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>)::'lambda'()::operator()() const Line | Count | Source | 393 | 2 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 2 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 2 | const bool done = pred(); | 405 | 2 | return done; | 406 | 2 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>, capnp::Request<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::ThreadMap, 19>>>(mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>&, capnp::Request<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::ThreadMap, 19>>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>)::'lambda'()::operator()() const Line | Count | Source | 393 | 20 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 20 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 20 | const bool done = pred(); | 405 | 20 | return done; | 406 | 20 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>)::'lambda'()::operator()() const Line | Count | Source | 393 | 12 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 12 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 12 | const bool done = pred(); | 405 | 12 | return done; | 406 | 12 | }); |
Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>)::'lambda'()::operator()() const void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>)::'lambda'()::operator()() const Line | Count | Source | 393 | 8 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 8 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 8 | const bool done = pred(); | 405 | 8 | return done; | 406 | 8 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>, capnp::Request<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults> (ipc::capnp::messages::Echo::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>>(mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>&, capnp::Request<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults> (ipc::capnp::messages::Echo::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>)::'lambda'()::operator()() const Line | Count | Source | 393 | 12 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 12 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 12 | const bool done = pred(); | 405 | 12 | return done; | 406 | 12 | }); |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Echo>, capnp::Request<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults> (ipc::capnp::messages::Echo::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::echo_fields::Echo, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>, mp::ClientParam<mp::Accessor<mp::echo_fields::Result, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::ProxyClient<ipc::capnp::messages::Echo>&, capnp::Request<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults> (ipc::capnp::messages::Echo::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::echo_fields::Echo, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&, mp::ClientParam<mp::Accessor<mp::echo_fields::Result, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Echo>)::'lambda'()::operator()() const Line | Count | Source | 393 | 12 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 12 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 12 | const bool done = pred(); | 405 | 12 | return done; | 406 | 12 | }); |
Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 22>, std::optional<interfaces::BlockRef>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 22>, std::optional<interfaces::BlockRef>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256>, mp::ClientParam<mp::Accessor<mp::mining_fields::Timeout, 1>, std::chrono::duration<double, std::ratio<1l, 1000l>>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::optional<interfaces::BlockRef>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Timeout, 1>, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::optional<interfaces::BlockRef>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCreateOptions const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Cooldown, 1>, bool>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCreateOptions const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Cooldown, 1>, bool>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCheckOptions const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCheckOptions const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>>(mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlockHeader&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlockHeader&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlock&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlock&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, node::CoinbaseTx&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, node::CoinbaseTx&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<uint256, std::allocator<uint256>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<uint256, std::allocator<uint256>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Version, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Timestamp, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Nonce, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Coinbase, 17>, std::shared_ptr<CTransaction const>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Version, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Timestamp, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Nonce, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Coinbase, 17>, std::shared_ptr<CTransaction const>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockWaitOptions>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockWaitOptions>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>)::'lambda'()::operator()() const void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Rpc>, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults> (ipc::capnp::messages::Rpc::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::rpc_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Uri, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::User, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Result, 18>, UniValue&>>(mp::ProxyClient<ipc::capnp::messages::Rpc>&, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults> (ipc::capnp::messages::Rpc::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::rpc_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Uri, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::User, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Result, 18>, UniValue&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Rpc>)::'lambda'()::operator()() const Line | Count | Source | 393 | 8 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 8 | while (m_fn) { | 400 | 0 | auto fn = std::move(*m_fn); | 401 | 0 | m_fn.reset(); | 402 | 0 | Unlock(lock, fn); | 403 | 0 | } | 404 | 8 | const bool done = pred(); | 405 | 8 | return done; | 406 | 8 | }); |
Unexecuted instantiation: proxy.cpp:void mp::Waiter::wait<mp::ProxyServer<mp::ThreadMap>::makePool(capnp::CallContext<mp::ThreadMap::MakePoolParams, mp::ThreadMap::MakePoolResults>)::$_0::operator()() const::'lambda'()>(mp::Lock&, mp::ProxyServer<mp::ThreadMap>::makePool(capnp::CallContext<mp::ThreadMap::MakePoolParams, mp::ThreadMap::MakePoolResults>)::$_0::operator()() const::'lambda'())::'lambda'()::operator()() const proxy.cpp:void mp::Waiter::wait<mp::ProxyServer<mp::ThreadMap>::makeThread(capnp::CallContext<mp::ThreadMap::MakeThreadParams, mp::ThreadMap::MakeThreadResults>)::$_0::operator()() const::'lambda'()>(mp::Lock&, mp::ProxyServer<mp::ThreadMap>::makeThread(capnp::CallContext<mp::ThreadMap::MakeThreadParams, mp::ThreadMap::MakeThreadResults>)::$_0::operator()() const::'lambda'())::'lambda'()::operator()() const Line | Count | Source | 393 | 46 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 72 | while (m_fn) { | 400 | 26 | auto fn = std::move(*m_fn); | 401 | 26 | m_fn.reset(); | 402 | 26 | Unlock(lock, fn); | 403 | 26 | } | 404 | 46 | const bool done = pred(); | 405 | 46 | return done; | 406 | 46 | }); |
|
407 | 53 | } void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::A, 1>, int>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::B, 1>, int>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 2>, int&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::A, 1>, int>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::B, 1>, int>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 2>, int&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>) Line | Count | Source | 392 | 1 | { | 393 | 1 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 1 | while (m_fn) { | 400 | 1 | auto fn = std::move(*m_fn); | 401 | 1 | m_fn.reset(); | 402 | 1 | Unlock(lock, fn); | 403 | 1 | } | 404 | 1 | const bool done = pred(); | 405 | 1 | return done; | 406 | 1 | }); | 407 | 1 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, COutPoint&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, COutPoint>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, COutPoint&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>) Line | Count | Source | 392 | 1 | { | 393 | 1 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 1 | while (m_fn) { | 400 | 1 | auto fn = std::move(*m_fn); | 401 | 1 | m_fn.reset(); | 402 | 1 | Unlock(lock, fn); | 403 | 1 | } | 404 | 1 | const bool done = pred(); | 405 | 1 | return done; | 406 | 1 | }); | 407 | 1 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, UniValue&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, UniValue>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, UniValue&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>) Line | Count | Source | 392 | 1 | { | 393 | 1 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 1 | while (m_fn) { | 400 | 1 | auto fn = std::move(*m_fn); | 401 | 1 | m_fn.reset(); | 402 | 1 | Unlock(lock, fn); | 403 | 1 | } | 404 | 1 | const bool done = pred(); | 405 | 1 | return done; | 406 | 1 | }); | 407 | 1 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::shared_ptr<CTransaction const>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::shared_ptr<CTransaction const>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::shared_ptr<CTransaction const>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::shared_ptr<CTransaction const>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>) Line | Count | Source | 392 | 1 | { | 393 | 1 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 1 | while (m_fn) { | 400 | 1 | auto fn = std::move(*m_fn); | 401 | 1 | m_fn.reset(); | 402 | 1 | Unlock(lock, fn); | 403 | 1 | } | 404 | 1 | const bool done = pred(); | 405 | 1 | return done; | 406 | 1 | }); | 407 | 1 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<char, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<char, std::allocator<char>>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<char, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<char, std::allocator<char>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>) Line | Count | Source | 392 | 1 | { | 393 | 1 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 1 | while (m_fn) { | 400 | 1 | auto fn = std::move(*m_fn); | 401 | 1 | m_fn.reset(); | 402 | 1 | Unlock(lock, fn); | 403 | 1 | } | 404 | 1 | const bool done = pred(); | 405 | 1 | return done; | 406 | 1 | }); | 407 | 1 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, CScript>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, CScript&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, CScript>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, CScript&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>) Line | Count | Source | 392 | 1 | { | 393 | 1 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 1 | while (m_fn) { | 400 | 1 | auto fn = std::move(*m_fn); | 401 | 1 | m_fn.reset(); | 402 | 1 | Unlock(lock, fn); | 403 | 1 | } | 404 | 1 | const bool done = pred(); | 405 | 1 | return done; | 406 | 1 | }); | 407 | 1 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<gen::FooInterface>, capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults> (gen::FooInterface::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<gen::FooInterface>&, capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults> (gen::FooInterface::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Arg, 17>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>>&&, mp::ClientParam<mp::Accessor<mp::ipc_test_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<gen::FooInterface>) Line | Count | Source | 392 | 1 | { | 393 | 1 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 1 | while (m_fn) { | 400 | 1 | auto fn = std::move(*m_fn); | 401 | 1 | m_fn.reset(); | 402 | 1 | Unlock(lock, fn); | 403 | 1 | } | 404 | 1 | const bool done = pred(); | 405 | 1 | return done; | 406 | 1 | }); | 407 | 1 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>, capnp::Request<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::ThreadMap, 19>>>(mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>&, capnp::Request<ipc::capnp::messages::Init::ConstructParams, ipc::capnp::messages::Init::ConstructResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::ThreadMap, 19>>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>) Line | Count | Source | 392 | 10 | { | 393 | 10 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 10 | while (m_fn) { | 400 | 10 | auto fn = std::move(*m_fn); | 401 | 10 | m_fn.reset(); | 402 | 10 | Unlock(lock, fn); | 403 | 10 | } | 404 | 10 | const bool done = pred(); | 405 | 10 | return done; | 406 | 10 | }); | 407 | 10 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>) Line | Count | Source | 392 | 6 | { | 393 | 6 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 6 | while (m_fn) { | 400 | 6 | auto fn = std::move(*m_fn); | 401 | 6 | m_fn.reset(); | 402 | 6 | Unlock(lock, fn); | 403 | 6 | } | 404 | 6 | const bool done = pred(); | 405 | 6 | return done; | 406 | 6 | }); | 407 | 6 | } |
Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeMiningOld2Params, ipc::capnp::messages::Init::MakeMiningOld2Results> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>) void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Init>, capnp::Request<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults> (ipc::capnp::messages::Init::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>&>>(mp::ProxyClient<ipc::capnp::messages::Init>&, capnp::Request<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults> (ipc::capnp::messages::Init::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::init_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::init_fields::Result, 18>, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Init>) Line | Count | Source | 392 | 4 | { | 393 | 4 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 4 | while (m_fn) { | 400 | 4 | auto fn = std::move(*m_fn); | 401 | 4 | m_fn.reset(); | 402 | 4 | Unlock(lock, fn); | 403 | 4 | } | 404 | 4 | const bool done = pred(); | 405 | 4 | return done; | 406 | 4 | }); | 407 | 4 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>, capnp::Request<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults> (ipc::capnp::messages::Echo::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>>(mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>&, capnp::Request<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults> (ipc::capnp::messages::Echo::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>) Line | Count | Source | 392 | 6 | { | 393 | 6 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 6 | while (m_fn) { | 400 | 6 | auto fn = std::move(*m_fn); | 401 | 6 | m_fn.reset(); | 402 | 6 | Unlock(lock, fn); | 403 | 6 | } | 404 | 6 | const bool done = pred(); | 405 | 6 | return done; | 406 | 6 | }); | 407 | 6 | } |
void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Echo>, capnp::Request<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults> (ipc::capnp::messages::Echo::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::echo_fields::Echo, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>, mp::ClientParam<mp::Accessor<mp::echo_fields::Result, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::ProxyClient<ipc::capnp::messages::Echo>&, capnp::Request<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults> (ipc::capnp::messages::Echo::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::echo_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::echo_fields::Echo, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&, mp::ClientParam<mp::Accessor<mp::echo_fields::Result, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Echo>) Line | Count | Source | 392 | 6 | { | 393 | 6 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 6 | while (m_fn) { | 400 | 6 | auto fn = std::move(*m_fn); | 401 | 6 | m_fn.reset(); | 402 | 6 | Unlock(lock, fn); | 403 | 6 | } | 404 | 6 | const bool done = pred(); | 405 | 6 | return done; | 406 | 6 | }); | 407 | 6 | } |
Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 22>, std::optional<interfaces::BlockRef>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 22>, std::optional<interfaces::BlockRef>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256>, mp::ClientParam<mp::Accessor<mp::mining_fields::Timeout, 1>, std::chrono::duration<double, std::ratio<1l, 1000l>>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::optional<interfaces::BlockRef>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::CurrentTip, 17>, uint256>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Timeout, 1>, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::optional<interfaces::BlockRef>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCreateOptions const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Cooldown, 1>, bool>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCreateOptions const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Cooldown, 1>, bool>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCheckOptions const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockCheckOptions const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::InterruptParams, ipc::capnp::messages::Mining::InterruptResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Block, 17>, CBlock const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Reason, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Debug, 18>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Txids, 17>, std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Mining>, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults> (ipc::capnp::messages::Mining::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>>(mp::ProxyClient<ipc::capnp::messages::Mining>&, capnp::Request<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults> (ipc::capnp::messages::Mining::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Wtxids, 17>, std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const>>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Mining>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>>(mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlockHeader&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlockHeader&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlock&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, CBlock&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<long, std::allocator<long>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, node::CoinbaseTx&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, node::CoinbaseTx&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<uint256, std::allocator<uint256>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::vector<uint256, std::allocator<uint256>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Version, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Timestamp, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Nonce, 1>, unsigned int>, mp::ClientParam<mp::Accessor<mp::mining_fields::Coinbase, 17>, std::shared_ptr<CTransaction const>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Version, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Timestamp, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Nonce, 1>, unsigned int>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Coinbase, 17>, std::shared_ptr<CTransaction const>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 2>, bool&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockWaitOptions>, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::mining_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Options, 17>, node::BlockWaitOptions>&&, mp::ClientParam<mp::Accessor<mp::mining_fields::Result, 18>, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) Unexecuted instantiation: void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::BlockTemplate>, capnp::Request<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults> (ipc::capnp::messages::BlockTemplate::Client::*)(kj::Maybe<capnp::MessageSize>)>(mp::ProxyClient<ipc::capnp::messages::BlockTemplate>&, capnp::Request<ipc::capnp::messages::BlockTemplate::InterruptWaitParams, ipc::capnp::messages::BlockTemplate::InterruptWaitResults> (ipc::capnp::messages::BlockTemplate::Client::* const&)(kj::Maybe<capnp::MessageSize>))::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::BlockTemplate>) void mp::Waiter::wait<void mp::clientInvoke<mp::ProxyClient<ipc::capnp::messages::Rpc>, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults> (ipc::capnp::messages::Rpc::Client::*)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::rpc_fields::Context, 17>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Uri, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::User, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, mp::ClientParam<mp::Accessor<mp::rpc_fields::Result, 18>, UniValue&>>(mp::ProxyClient<ipc::capnp::messages::Rpc>&, capnp::Request<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults> (ipc::capnp::messages::Rpc::Client::* const&)(kj::Maybe<capnp::MessageSize>), mp::ClientParam<mp::Accessor<mp::rpc_fields::Context, 17>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Request, 17>, UniValue>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Uri, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::User, 17>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&, mp::ClientParam<mp::Accessor<mp::rpc_fields::Result, 18>, UniValue&>&&)::'lambda0'()>(mp::Lock&, mp::ProxyClient<ipc::capnp::messages::Rpc>) Line | Count | Source | 392 | 4 | { | 393 | 4 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 4 | while (m_fn) { | 400 | 4 | auto fn = std::move(*m_fn); | 401 | 4 | m_fn.reset(); | 402 | 4 | Unlock(lock, fn); | 403 | 4 | } | 404 | 4 | const bool done = pred(); | 405 | 4 | return done; | 406 | 4 | }); | 407 | 4 | } |
Unexecuted instantiation: proxy.cpp:void mp::Waiter::wait<mp::ProxyServer<mp::ThreadMap>::makePool(capnp::CallContext<mp::ThreadMap::MakePoolParams, mp::ThreadMap::MakePoolResults>)::$_0::operator()() const::'lambda'()>(mp::Lock&, mp::ProxyServer<mp::ThreadMap>::makePool(capnp::CallContext<mp::ThreadMap::MakePoolParams, mp::ThreadMap::MakePoolResults>)::$_0::operator()() const::'lambda'()) proxy.cpp:void mp::Waiter::wait<mp::ProxyServer<mp::ThreadMap>::makeThread(capnp::CallContext<mp::ThreadMap::MakeThreadParams, mp::ThreadMap::MakeThreadResults>)::$_0::operator()() const::'lambda'()>(mp::Lock&, mp::ProxyServer<mp::ThreadMap>::makeThread(capnp::CallContext<mp::ThreadMap::MakeThreadParams, mp::ThreadMap::MakeThreadResults>)::$_0::operator()() const::'lambda'()) Line | Count | Source | 392 | 10 | { | 393 | 10 | m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) { | 394 | | // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid | 395 | | // a lost-wakeup bug. A new m_fn and m_cv notification might be sent | 396 | | // after the fn() call and before the lock.lock() call in this loop | 397 | | // in the case where a capnp response is sent and a brand new | 398 | | // request is immediately received. | 399 | 10 | while (m_fn) { | 400 | 10 | auto fn = std::move(*m_fn); | 401 | 10 | m_fn.reset(); | 402 | 10 | Unlock(lock, fn); | 403 | 10 | } | 404 | 10 | const bool done = pred(); | 405 | 10 | return done; | 406 | 10 | }); | 407 | 10 | } |
|
408 | | |
409 | | //! Mutex mainly used internally by waiter class, but also used externally |
410 | | //! to guard access to related state. Specifically, since the thread_local |
411 | | //! ThreadContext struct owns a Waiter, the Waiter::m_mutex is used to guard |
412 | | //! access to other parts of the struct to avoid needing to deal with more |
413 | | //! mutexes than necessary. This mutex can be held at the same time as |
414 | | //! EventLoop::m_mutex as long as Waiter::mutex is locked first and |
415 | | //! EventLoop::m_mutex is locked second. |
416 | | Mutex m_mutex; |
417 | | std::condition_variable m_cv MP_GUARDED_BY(m_mutex); |
418 | | std::optional<kj::Function<void()>> m_fn MP_GUARDED_BY(m_mutex); |
419 | | }; |
420 | | |
421 | | //! Object holding network & rpc state associated with either an incoming server |
422 | | //! connection, or an outgoing client connection. It must be created and destroyed |
423 | | //! on the event loop thread. |
424 | | //! In addition to Cap'n Proto state, it also holds lists of callbacks to run |
425 | | //! when the connection is closed. |
426 | | class Connection |
427 | | { |
428 | | public: |
429 | | Connection(EventLoop& loop, kj::Own<kj::AsyncIoStream>&& stream_) |
430 | 11 | : m_loop(loop), m_stream(kj::mv(stream_)), |
431 | 11 | m_network(*m_stream, ::capnp::rpc::twoparty::Side::CLIENT, ::capnp::ReaderOptions()), |
432 | 11 | m_rpc_system(::capnp::makeRpcClient(m_network)) {} |
433 | | Connection(EventLoop& loop, |
434 | | kj::Own<kj::AsyncIoStream>&& stream_, |
435 | | const std::function<::capnp::Capability::Client(Connection&)>& make_client) |
436 | 11 | : m_loop(loop), m_stream(kj::mv(stream_)), |
437 | 11 | m_network(*m_stream, ::capnp::rpc::twoparty::Side::SERVER, ::capnp::ReaderOptions()), |
438 | 11 | m_rpc_system(::capnp::makeRpcServer(m_network, make_client(*this))) {} |
439 | | |
440 | | //! Run cleanup functions. Must be called from the event loop thread. First |
441 | | //! calls synchronous cleanup functions while blocked (to free capnp |
442 | | //! Capability::Client handles owned by ProxyClient objects), then schedules |
443 | | //! asynchronous cleanup functions to run in a worker thread (to run |
444 | | //! destructors of m_impl instances owned by ProxyServer objects). |
445 | | ~Connection(); |
446 | | |
447 | | //! Register synchronous cleanup function to run on event loop thread (with |
448 | | //! access to capnp thread local variables) when disconnect() is called. |
449 | | //! any new i/o. |
450 | | CleanupIt addSyncCleanup(std::function<void()> fn); |
451 | | void removeSyncCleanup(CleanupIt it); |
452 | | |
453 | | //! Add disconnect handler. |
454 | | template <typename F> |
455 | | void onDisconnect(F&& f) |
456 | 21 | { |
457 | | // Add disconnect handler to local TaskSet to ensure it is canceled and |
458 | | // will never run after connection object is destroyed. But when disconnect |
459 | | // handler fires, do not call the function f right away, instead add it |
460 | | // to the EventLoop TaskSet to avoid "Promise callback destroyed itself" |
461 | | // error in the typical case where f deletes this Connection object. |
462 | 21 | m_on_disconnect.add(m_network.onDisconnect().then( |
463 | 21 | [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));ipc_test.cpp:void mp::Connection::onDisconnect<IpcPipeTest()::$_0::operator()() const::'lambda'()>(IpcPipeTest()::$_0::operator()() const::'lambda'()&&)::'lambda'()::operator()() Line | Count | Source | 463 | 1 | [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); })); |
Unexecuted instantiation: void mp::Connection::onDisconnect<std::unique_ptr<mp::ProxyClient<ipc::capnp::messages::Init>, std::default_delete<mp::ProxyClient<ipc::capnp::messages::Init>>> mp::ConnectStream<ipc::capnp::messages::Init>(mp::EventLoop&, int)::'lambda'()::operator()() const::'lambda'()>(ipc::capnp::messages::Init&&)::'lambda'()::operator()() void mp::Connection::onDisconnect<void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&)::'lambda'()>(void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&)::'lambda'()&&)::'lambda'()::operator()() Line | Count | Source | 463 | 10 | [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); })); |
|
464 | 21 | } ipc_test.cpp:void mp::Connection::onDisconnect<IpcPipeTest()::$_0::operator()() const::'lambda'()>(IpcPipeTest()::$_0::operator()() const::'lambda'()&&) Line | Count | Source | 456 | 1 | { | 457 | | // Add disconnect handler to local TaskSet to ensure it is canceled and | 458 | | // will never run after connection object is destroyed. But when disconnect | 459 | | // handler fires, do not call the function f right away, instead add it | 460 | | // to the EventLoop TaskSet to avoid "Promise callback destroyed itself" | 461 | | // error in the typical case where f deletes this Connection object. | 462 | 1 | m_on_disconnect.add(m_network.onDisconnect().then( | 463 | 1 | [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); })); | 464 | 1 | } |
void mp::Connection::onDisconnect<std::unique_ptr<mp::ProxyClient<ipc::capnp::messages::Init>, std::default_delete<mp::ProxyClient<ipc::capnp::messages::Init>>> mp::ConnectStream<ipc::capnp::messages::Init>(mp::EventLoop&, int)::'lambda'()::operator()() const::'lambda'()>(ipc::capnp::messages::Init&&) Line | Count | Source | 456 | 10 | { | 457 | | // Add disconnect handler to local TaskSet to ensure it is canceled and | 458 | | // will never run after connection object is destroyed. But when disconnect | 459 | | // handler fires, do not call the function f right away, instead add it | 460 | | // to the EventLoop TaskSet to avoid "Promise callback destroyed itself" | 461 | | // error in the typical case where f deletes this Connection object. | 462 | 10 | m_on_disconnect.add(m_network.onDisconnect().then( | 463 | 10 | [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); })); | 464 | 10 | } |
void mp::Connection::onDisconnect<void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&)::'lambda'()>(void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&)::'lambda'()&&) Line | Count | Source | 456 | 10 | { | 457 | | // Add disconnect handler to local TaskSet to ensure it is canceled and | 458 | | // will never run after connection object is destroyed. But when disconnect | 459 | | // handler fires, do not call the function f right away, instead add it | 460 | | // to the EventLoop TaskSet to avoid "Promise callback destroyed itself" | 461 | | // error in the typical case where f deletes this Connection object. | 462 | 10 | m_on_disconnect.add(m_network.onDisconnect().then( | 463 | 10 | [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); })); | 464 | 10 | } |
|
465 | | |
466 | | EventLoopRef m_loop; |
467 | | kj::Own<kj::AsyncIoStream> m_stream; |
468 | | LoggingErrorHandler m_error_handler{*m_loop}; |
469 | | //! TaskSet used to cancel the m_network.onDisconnect() handler for remote |
470 | | //! disconnections, if the connection is closed locally first by deleting |
471 | | //! this Connection object. |
472 | | kj::TaskSet m_on_disconnect{m_error_handler}; |
473 | | ::capnp::TwoPartyVatNetwork m_network; |
474 | | std::optional<::capnp::RpcSystem<::capnp::rpc::twoparty::VatId>> m_rpc_system; |
475 | | |
476 | | // ThreadMap interface client, used to create a remote server thread when an |
477 | | // client IPC call is being made for the first time from a new thread. |
478 | | ThreadMap::Client m_thread_map{nullptr}; |
479 | | |
480 | | //! Collection of server-side IPC worker threads (ProxyServer<Thread> objects previously returned by |
481 | | //! ThreadMap.makeThread) used to service requests to clients. |
482 | | ::capnp::CapabilityServerSet<Thread> m_threads; |
483 | | |
484 | | //! A thread created by makePool with associated pending work queue. Vector is filled once by makePool() and never resized. |
485 | | struct PoolSlot { |
486 | | Thread::Client client; |
487 | | size_t depth{0}; |
488 | | }; |
489 | | std::vector<PoolSlot> m_thread_pool; |
490 | | |
491 | | //! Canceler for canceling promises that we want to discard when the |
492 | | //! connection is destroyed. This is used to interrupt method calls that are |
493 | | //! still executing at time of disconnection. |
494 | | kj::Canceler m_canceler; |
495 | | |
496 | | //! Cleanup functions to run if connection is broken unexpectedly. List |
497 | | //! will be empty if all ProxyClient are destroyed cleanly before the |
498 | | //! connection is destroyed. |
499 | | CleanupList m_sync_cleanup_fns; |
500 | | }; |
501 | | |
502 | | //! Vat id for server side of connection. Required argument to RpcSystem::bootStrap() |
503 | | //! |
504 | | //! "Vat" is Cap'n Proto nomenclature for a host of various objects that facilitates |
505 | | //! bidirectional communication with other vats; it is often but not always 1-1 with |
506 | | //! processes. Cap'n Proto doesn't reference clients or servers per se; instead everything |
507 | | //! is just a vat. |
508 | | //! |
509 | | //! See also: https://github.com/capnproto/capnproto/blob/9021f0c722b36cb11e3690b0860939255ebad39c/c%2B%2B/src/capnp/rpc.capnp#L42-L56 |
510 | | struct ServerVatId |
511 | | { |
512 | | ::capnp::word scratch[4]{}; |
513 | | ::capnp::MallocMessageBuilder message{scratch}; |
514 | | ::capnp::rpc::twoparty::VatId::Builder vat_id{message.getRoot<::capnp::rpc::twoparty::VatId>()}; |
515 | 11 | ServerVatId() { vat_id.setSide(::capnp::rpc::twoparty::Side::SERVER); } |
516 | | }; |
517 | | |
518 | | template <typename Interface, typename Impl> |
519 | | ProxyClientBase<Interface, Impl>::ProxyClientBase(typename Interface::Client client, |
520 | | Connection* connection, |
521 | | bool destroy_connection) |
522 | 67 | : m_client(std::move(client)), m_context(connection) |
523 | | |
524 | 67 | { |
525 | 67 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; |
526 | | // Handler for the connection getting destroyed before this client object. |
527 | 67 | auto disconnect_cb = m_context.connection->addSyncCleanup([this]() { |
528 | | // Release client capability by move-assigning to temporary. |
529 | 0 | { |
530 | 0 | typename Interface::Client(std::move(m_client)); |
531 | 0 | } |
532 | 0 | Lock lock{m_context.loop->m_mutex}; |
533 | 0 | m_context.connection = nullptr; |
534 | 0 | }); Unexecuted instantiation: mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda'()::operator()() const Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)::'lambda'()::operator()() const Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)::'lambda'()::operator()() const Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyClientBase(ipc::capnp::messages::Mining::Client, mp::Connection*, bool)::'lambda'()::operator()() const Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyClientBase(ipc::capnp::messages::Rpc::Client, mp::Connection*, bool)::'lambda'()::operator()() const Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyClientBase(ipc::capnp::messages::BlockTemplate::Client, mp::Connection*, bool)::'lambda'()::operator()() const Unexecuted instantiation: mp::ProxyClientBase<mp::Thread, capnp::Void>::ProxyClientBase(mp::Thread::Client, mp::Connection*, bool)::'lambda'()::operator()() const |
535 | | |
536 | | // Two shutdown sequences are supported: |
537 | | // |
538 | | // - A normal sequence where client proxy objects are deleted by external |
539 | | // code that no longer needs them |
540 | | // |
541 | | // - A garbage collection sequence where the connection or event loop shuts |
542 | | // down while external code is still holding client references. |
543 | | // |
544 | | // The first case is handled here when m_context.connection is not null. The |
545 | | // second case is handled by the disconnect_cb function, which sets |
546 | | // m_context.connection to null so nothing happens here. |
547 | 67 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ |
548 | 67 | { |
549 | | // If the capnp interface defines a destroy method, call it to destroy |
550 | | // the remote object, waiting for it to be deleted server side. If the |
551 | | // capnp interface does not define a destroy method, this will just call |
552 | | // an empty stub defined in the ProxyClientBase class and do nothing. |
553 | | // Exceptions are caught and logged rather than propagated because |
554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time |
555 | | // this runs. |
556 | 67 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda'()::operator()() const Line | Count | Source | 556 | 1 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { |
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda'()::operator()() const Line | Count | Source | 556 | 10 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { |
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda'()::operator()() const Line | Count | Source | 556 | 6 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyClientBase(ipc::capnp::messages::Mining::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda'()::operator()() const mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyClientBase(ipc::capnp::messages::Rpc::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda'()::operator()() const Line | Count | Source | 556 | 4 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyClientBase(ipc::capnp::messages::BlockTemplate::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda'()::operator()() const mp::ProxyClientBase<mp::Thread, capnp::Void>::ProxyClientBase(mp::Thread::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda'()::operator()() const Line | Count | Source | 556 | 46 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { |
|
557 | 0 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; |
558 | 0 | } |
559 | | |
560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code |
561 | 67 | m_context.loop->sync([&]() { |
562 | | // Remove disconnect callback on cleanup so it doesn't run and try |
563 | | // to access this object after it's destroyed. This call needs to |
564 | | // run inside loop->sync() on the event loop thread because |
565 | | // otherwise, if there were an ill-timed disconnect, the |
566 | | // onDisconnect handler could fire and delete the Connection object |
567 | | // before the removeSyncCleanup call. |
568 | 67 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); |
569 | | |
570 | | // Release client capability by move-assigning to temporary. |
571 | 67 | { |
572 | 67 | typename Interface::Client(std::move(m_client)); |
573 | 67 | } |
574 | 67 | if (destroy_connection) { |
575 | 11 | delete m_context.connection; |
576 | 11 | m_context.connection = nullptr; |
577 | 11 | } |
578 | 67 | }); mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const Line | Count | Source | 561 | 1 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 1 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 1 | { | 572 | 1 | typename Interface::Client(std::move(m_client)); | 573 | 1 | } | 574 | 1 | if (destroy_connection) { | 575 | 1 | delete m_context.connection; | 576 | 1 | m_context.connection = nullptr; | 577 | 1 | } | 578 | 1 | }); |
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const Line | Count | Source | 561 | 10 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 10 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 10 | { | 572 | 10 | typename Interface::Client(std::move(m_client)); | 573 | 10 | } | 574 | 10 | if (destroy_connection) { | 575 | 10 | delete m_context.connection; | 576 | 10 | m_context.connection = nullptr; | 577 | 10 | } | 578 | 10 | }); |
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const Line | Count | Source | 561 | 6 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 6 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 6 | { | 572 | 6 | typename Interface::Client(std::move(m_client)); | 573 | 6 | } | 574 | 6 | if (destroy_connection) { | 575 | 0 | delete m_context.connection; | 576 | 0 | m_context.connection = nullptr; | 577 | 0 | } | 578 | 6 | }); |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyClientBase(ipc::capnp::messages::Mining::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyClientBase(ipc::capnp::messages::Rpc::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const Line | Count | Source | 561 | 4 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 4 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 4 | { | 572 | 4 | typename Interface::Client(std::move(m_client)); | 573 | 4 | } | 574 | 4 | if (destroy_connection) { | 575 | 0 | delete m_context.connection; | 576 | 0 | m_context.connection = nullptr; | 577 | 0 | } | 578 | 4 | }); |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyClientBase(ipc::capnp::messages::BlockTemplate::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const mp::ProxyClientBase<mp::Thread, capnp::Void>::ProxyClientBase(mp::Thread::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const Line | Count | Source | 561 | 46 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 46 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 46 | { | 572 | 46 | typename Interface::Client(std::move(m_client)); | 573 | 46 | } | 574 | 46 | if (destroy_connection) { | 575 | 0 | delete m_context.connection; | 576 | 0 | m_context.connection = nullptr; | 577 | 0 | } | 578 | 46 | }); |
|
579 | 67 | } |
580 | 67 | }); mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda0'()::operator()() const Line | Count | Source | 547 | 1 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 1 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 1 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 0 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 0 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 1 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 1 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 1 | { | 572 | 1 | typename Interface::Client(std::move(m_client)); | 573 | 1 | } | 574 | 1 | if (destroy_connection) { | 575 | 1 | delete m_context.connection; | 576 | 1 | m_context.connection = nullptr; | 577 | 1 | } | 578 | 1 | }); | 579 | 1 | } | 580 | 1 | }); |
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)::'lambda0'()::operator()() const Line | Count | Source | 547 | 10 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 10 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 10 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 0 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 0 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 10 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 10 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 10 | { | 572 | 10 | typename Interface::Client(std::move(m_client)); | 573 | 10 | } | 574 | 10 | if (destroy_connection) { | 575 | 10 | delete m_context.connection; | 576 | 10 | m_context.connection = nullptr; | 577 | 10 | } | 578 | 10 | }); | 579 | 10 | } | 580 | 10 | }); |
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)::'lambda0'()::operator()() const Line | Count | Source | 547 | 6 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 6 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 6 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 0 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 0 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 6 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 6 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 6 | { | 572 | 6 | typename Interface::Client(std::move(m_client)); | 573 | 6 | } | 574 | 6 | if (destroy_connection) { | 575 | 6 | delete m_context.connection; | 576 | 6 | m_context.connection = nullptr; | 577 | 6 | } | 578 | 6 | }); | 579 | 6 | } | 580 | 6 | }); |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyClientBase(ipc::capnp::messages::Mining::Client, mp::Connection*, bool)::'lambda0'()::operator()() const mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyClientBase(ipc::capnp::messages::Rpc::Client, mp::Connection*, bool)::'lambda0'()::operator()() const Line | Count | Source | 547 | 4 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 4 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 4 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 0 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 0 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 4 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 4 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 4 | { | 572 | 4 | typename Interface::Client(std::move(m_client)); | 573 | 4 | } | 574 | 4 | if (destroy_connection) { | 575 | 4 | delete m_context.connection; | 576 | 4 | m_context.connection = nullptr; | 577 | 4 | } | 578 | 4 | }); | 579 | 4 | } | 580 | 4 | }); |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyClientBase(ipc::capnp::messages::BlockTemplate::Client, mp::Connection*, bool)::'lambda0'()::operator()() const mp::ProxyClientBase<mp::Thread, capnp::Void>::ProxyClientBase(mp::Thread::Client, mp::Connection*, bool)::'lambda0'()::operator()() const Line | Count | Source | 547 | 46 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 46 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 46 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 0 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 0 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 46 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 46 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 46 | { | 572 | 46 | typename Interface::Client(std::move(m_client)); | 573 | 46 | } | 574 | 46 | if (destroy_connection) { | 575 | 46 | delete m_context.connection; | 576 | 46 | m_context.connection = nullptr; | 577 | 46 | } | 578 | 46 | }); | 579 | 46 | } | 580 | 46 | }); |
|
581 | 67 | Sub::construct(*this); |
582 | 67 | } mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool) Line | Count | Source | 522 | 1 | : m_client(std::move(client)), m_context(connection) | 523 | | | 524 | 1 | { | 525 | 1 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 526 | | // Handler for the connection getting destroyed before this client object. | 527 | 1 | auto disconnect_cb = m_context.connection->addSyncCleanup([this]() { | 528 | | // Release client capability by move-assigning to temporary. | 529 | 1 | { | 530 | 1 | typename Interface::Client(std::move(m_client)); | 531 | 1 | } | 532 | 1 | Lock lock{m_context.loop->m_mutex}; | 533 | 1 | m_context.connection = nullptr; | 534 | 1 | }); | 535 | | | 536 | | // Two shutdown sequences are supported: | 537 | | // | 538 | | // - A normal sequence where client proxy objects are deleted by external | 539 | | // code that no longer needs them | 540 | | // | 541 | | // - A garbage collection sequence where the connection or event loop shuts | 542 | | // down while external code is still holding client references. | 543 | | // | 544 | | // The first case is handled here when m_context.connection is not null. The | 545 | | // second case is handled by the disconnect_cb function, which sets | 546 | | // m_context.connection to null so nothing happens here. | 547 | 1 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 1 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 1 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 1 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 1 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 1 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 1 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 1 | { | 572 | 1 | typename Interface::Client(std::move(m_client)); | 573 | 1 | } | 574 | 1 | if (destroy_connection) { | 575 | 1 | delete m_context.connection; | 576 | 1 | m_context.connection = nullptr; | 577 | 1 | } | 578 | 1 | }); | 579 | 1 | } | 580 | 1 | }); | 581 | 1 | Sub::construct(*this); | 582 | 1 | } |
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool) Line | Count | Source | 522 | 10 | : m_client(std::move(client)), m_context(connection) | 523 | | | 524 | 10 | { | 525 | 10 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 526 | | // Handler for the connection getting destroyed before this client object. | 527 | 10 | auto disconnect_cb = m_context.connection->addSyncCleanup([this]() { | 528 | | // Release client capability by move-assigning to temporary. | 529 | 10 | { | 530 | 10 | typename Interface::Client(std::move(m_client)); | 531 | 10 | } | 532 | 10 | Lock lock{m_context.loop->m_mutex}; | 533 | 10 | m_context.connection = nullptr; | 534 | 10 | }); | 535 | | | 536 | | // Two shutdown sequences are supported: | 537 | | // | 538 | | // - A normal sequence where client proxy objects are deleted by external | 539 | | // code that no longer needs them | 540 | | // | 541 | | // - A garbage collection sequence where the connection or event loop shuts | 542 | | // down while external code is still holding client references. | 543 | | // | 544 | | // The first case is handled here when m_context.connection is not null. The | 545 | | // second case is handled by the disconnect_cb function, which sets | 546 | | // m_context.connection to null so nothing happens here. | 547 | 10 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 10 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 10 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 10 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 10 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 10 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 10 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 10 | { | 572 | 10 | typename Interface::Client(std::move(m_client)); | 573 | 10 | } | 574 | 10 | if (destroy_connection) { | 575 | 10 | delete m_context.connection; | 576 | 10 | m_context.connection = nullptr; | 577 | 10 | } | 578 | 10 | }); | 579 | 10 | } | 580 | 10 | }); | 581 | 10 | Sub::construct(*this); | 582 | 10 | } |
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool) Line | Count | Source | 522 | 6 | : m_client(std::move(client)), m_context(connection) | 523 | | | 524 | 6 | { | 525 | 6 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 526 | | // Handler for the connection getting destroyed before this client object. | 527 | 6 | auto disconnect_cb = m_context.connection->addSyncCleanup([this]() { | 528 | | // Release client capability by move-assigning to temporary. | 529 | 6 | { | 530 | 6 | typename Interface::Client(std::move(m_client)); | 531 | 6 | } | 532 | 6 | Lock lock{m_context.loop->m_mutex}; | 533 | 6 | m_context.connection = nullptr; | 534 | 6 | }); | 535 | | | 536 | | // Two shutdown sequences are supported: | 537 | | // | 538 | | // - A normal sequence where client proxy objects are deleted by external | 539 | | // code that no longer needs them | 540 | | // | 541 | | // - A garbage collection sequence where the connection or event loop shuts | 542 | | // down while external code is still holding client references. | 543 | | // | 544 | | // The first case is handled here when m_context.connection is not null. The | 545 | | // second case is handled by the disconnect_cb function, which sets | 546 | | // m_context.connection to null so nothing happens here. | 547 | 6 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 6 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 6 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 6 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 6 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 6 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 6 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 6 | { | 572 | 6 | typename Interface::Client(std::move(m_client)); | 573 | 6 | } | 574 | 6 | if (destroy_connection) { | 575 | 6 | delete m_context.connection; | 576 | 6 | m_context.connection = nullptr; | 577 | 6 | } | 578 | 6 | }); | 579 | 6 | } | 580 | 6 | }); | 581 | 6 | Sub::construct(*this); | 582 | 6 | } |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyClientBase(ipc::capnp::messages::Mining::Client, mp::Connection*, bool) mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyClientBase(ipc::capnp::messages::Rpc::Client, mp::Connection*, bool) Line | Count | Source | 522 | 4 | : m_client(std::move(client)), m_context(connection) | 523 | | | 524 | 4 | { | 525 | 4 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 526 | | // Handler for the connection getting destroyed before this client object. | 527 | 4 | auto disconnect_cb = m_context.connection->addSyncCleanup([this]() { | 528 | | // Release client capability by move-assigning to temporary. | 529 | 4 | { | 530 | 4 | typename Interface::Client(std::move(m_client)); | 531 | 4 | } | 532 | 4 | Lock lock{m_context.loop->m_mutex}; | 533 | 4 | m_context.connection = nullptr; | 534 | 4 | }); | 535 | | | 536 | | // Two shutdown sequences are supported: | 537 | | // | 538 | | // - A normal sequence where client proxy objects are deleted by external | 539 | | // code that no longer needs them | 540 | | // | 541 | | // - A garbage collection sequence where the connection or event loop shuts | 542 | | // down while external code is still holding client references. | 543 | | // | 544 | | // The first case is handled here when m_context.connection is not null. The | 545 | | // second case is handled by the disconnect_cb function, which sets | 546 | | // m_context.connection to null so nothing happens here. | 547 | 4 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 4 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 4 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 4 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 4 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 4 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 4 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 4 | { | 572 | 4 | typename Interface::Client(std::move(m_client)); | 573 | 4 | } | 574 | 4 | if (destroy_connection) { | 575 | 4 | delete m_context.connection; | 576 | 4 | m_context.connection = nullptr; | 577 | 4 | } | 578 | 4 | }); | 579 | 4 | } | 580 | 4 | }); | 581 | 4 | Sub::construct(*this); | 582 | 4 | } |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyClientBase(ipc::capnp::messages::BlockTemplate::Client, mp::Connection*, bool) mp::ProxyClientBase<mp::Thread, capnp::Void>::ProxyClientBase(mp::Thread::Client, mp::Connection*, bool) Line | Count | Source | 522 | 46 | : m_client(std::move(client)), m_context(connection) | 523 | | | 524 | 46 | { | 525 | 46 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 526 | | // Handler for the connection getting destroyed before this client object. | 527 | 46 | auto disconnect_cb = m_context.connection->addSyncCleanup([this]() { | 528 | | // Release client capability by move-assigning to temporary. | 529 | 46 | { | 530 | 46 | typename Interface::Client(std::move(m_client)); | 531 | 46 | } | 532 | 46 | Lock lock{m_context.loop->m_mutex}; | 533 | 46 | m_context.connection = nullptr; | 534 | 46 | }); | 535 | | | 536 | | // Two shutdown sequences are supported: | 537 | | // | 538 | | // - A normal sequence where client proxy objects are deleted by external | 539 | | // code that no longer needs them | 540 | | // | 541 | | // - A garbage collection sequence where the connection or event loop shuts | 542 | | // down while external code is still holding client references. | 543 | | // | 544 | | // The first case is handled here when m_context.connection is not null. The | 545 | | // second case is handled by the disconnect_cb function, which sets | 546 | | // m_context.connection to null so nothing happens here. | 547 | 46 | m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{ | 548 | 46 | { | 549 | | // If the capnp interface defines a destroy method, call it to destroy | 550 | | // the remote object, waiting for it to be deleted server side. If the | 551 | | // capnp interface does not define a destroy method, this will just call | 552 | | // an empty stub defined in the ProxyClientBase class and do nothing. | 553 | | // Exceptions are caught and logged rather than propagated because | 554 | | // ~ProxyClientBase is noexcept and the peer may be gone by the time | 555 | | // this runs. | 556 | 46 | if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) { | 557 | 46 | MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing."; | 558 | 46 | } | 559 | | | 560 | | // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code | 561 | 46 | m_context.loop->sync([&]() { | 562 | | // Remove disconnect callback on cleanup so it doesn't run and try | 563 | | // to access this object after it's destroyed. This call needs to | 564 | | // run inside loop->sync() on the event loop thread because | 565 | | // otherwise, if there were an ill-timed disconnect, the | 566 | | // onDisconnect handler could fire and delete the Connection object | 567 | | // before the removeSyncCleanup call. | 568 | 46 | if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb); | 569 | | | 570 | | // Release client capability by move-assigning to temporary. | 571 | 46 | { | 572 | 46 | typename Interface::Client(std::move(m_client)); | 573 | 46 | } | 574 | 46 | if (destroy_connection) { | 575 | 46 | delete m_context.connection; | 576 | 46 | m_context.connection = nullptr; | 577 | 46 | } | 578 | 46 | }); | 579 | 46 | } | 580 | 46 | }); | 581 | 46 | Sub::construct(*this); | 582 | 46 | } |
|
583 | | |
584 | | template <typename Interface, typename Impl> |
585 | | ProxyClientBase<Interface, Impl>::~ProxyClientBase() noexcept |
586 | 67 | { |
587 | 67 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; |
588 | 67 | CleanupRun(m_context.cleanup_fns); |
589 | 67 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; |
590 | 67 | } mp::ProxyClientBase<gen::FooInterface, FooImplementation>::~ProxyClientBase() Line | Count | Source | 586 | 1 | { | 587 | 1 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 588 | 1 | CleanupRun(m_context.cleanup_fns); | 589 | 1 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 590 | 1 | } |
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::~ProxyClientBase() Line | Count | Source | 586 | 10 | { | 587 | 10 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 588 | 10 | CleanupRun(m_context.cleanup_fns); | 589 | 10 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 590 | 10 | } |
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::~ProxyClientBase() Line | Count | Source | 586 | 6 | { | 587 | 6 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 588 | 6 | CleanupRun(m_context.cleanup_fns); | 589 | 6 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 590 | 6 | } |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::~ProxyClientBase() mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::~ProxyClientBase() Line | Count | Source | 586 | 4 | { | 587 | 4 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 588 | 4 | CleanupRun(m_context.cleanup_fns); | 589 | 4 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 590 | 4 | } |
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::~ProxyClientBase() mp::ProxyClientBase<mp::Thread, capnp::Void>::~ProxyClientBase() Line | Count | Source | 586 | 46 | { | 587 | 46 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 588 | 46 | CleanupRun(m_context.cleanup_fns); | 589 | 46 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 590 | 46 | } |
|
591 | | |
592 | | template <typename Interface, typename Impl> |
593 | | ProxyServerBase<Interface, Impl>::ProxyServerBase(std::shared_ptr<Impl> impl, Connection& connection) |
594 | 21 | : m_impl(std::move(impl)), m_context(&connection) |
595 | 21 | { |
596 | 21 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; |
597 | 21 | assert(m_impl); |
598 | 21 | } mp::ProxyServerBase<gen::FooInterface, FooImplementation>::ProxyServerBase(std::shared_ptr<FooImplementation>, mp::Connection&) Line | Count | Source | 594 | 1 | : m_impl(std::move(impl)), m_context(&connection) | 595 | 1 | { | 596 | 1 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 597 | | assert(m_impl); | 598 | 1 | } |
mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyServerBase(std::shared_ptr<interfaces::Init>, mp::Connection&) Line | Count | Source | 594 | 10 | : m_impl(std::move(impl)), m_context(&connection) | 595 | 10 | { | 596 | 10 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 597 | | assert(m_impl); | 598 | 10 | } |
mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyServerBase(std::shared_ptr<interfaces::Echo>, mp::Connection&) Line | Count | Source | 594 | 6 | : m_impl(std::move(impl)), m_context(&connection) | 595 | 6 | { | 596 | 6 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 597 | | assert(m_impl); | 598 | 6 | } |
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::Mining, interfaces::Mining>::ProxyServerBase(std::shared_ptr<interfaces::Mining>, mp::Connection&) mp::ProxyServerBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::ProxyServerBase(std::shared_ptr<interfaces::Rpc>, mp::Connection&) Line | Count | Source | 594 | 4 | : m_impl(std::move(impl)), m_context(&connection) | 595 | 4 | { | 596 | 4 | MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this; | 597 | | assert(m_impl); | 598 | 4 | } |
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyServerBase(std::shared_ptr<interfaces::BlockTemplate>, mp::Connection&) |
599 | | |
600 | | //! ProxyServer destructor, called from the EventLoop thread by Cap'n Proto |
601 | | //! garbage collection code after there are no more references to this object. |
602 | | //! This will typically happen when the corresponding ProxyClient object on the |
603 | | //! other side of the connection is destroyed. It can also happen earlier if the |
604 | | //! connection is broken or destroyed. In the latter case this destructor will |
605 | | //! typically be called inside m_rpc_system.reset() call in the ~Connection |
606 | | //! destructor while the Connection object still exists. However, because |
607 | | //! ProxyServer objects are refcounted, and the Connection object could be |
608 | | //! destroyed while asynchronous IPC calls are still in-flight, it's possible |
609 | | //! for this destructor to be called after the Connection object no longer |
610 | | //! exists, so it is NOT valid to dereference the m_context.connection pointer |
611 | | //! from this function. |
612 | | template <typename Interface, typename Impl> |
613 | | ProxyServerBase<Interface, Impl>::~ProxyServerBase() |
614 | 21 | { |
615 | 21 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; |
616 | 21 | if (m_impl) { |
617 | | // If impl is non-null at this point, it means no client is waiting for |
618 | | // the m_impl server object to be destroyed synchronously. This can |
619 | | // happen either if the interface did not define a "destroy" method (see |
620 | | // invokeDestroy method below), or if a destroy method was defined, but |
621 | | // the connection was broken before it could be called. |
622 | | // |
623 | | // In either case, be conservative and run the cleanup on an |
624 | | // asynchronous thread, to avoid destructors or cleanup functions |
625 | | // blocking or deadlocking the current EventLoop thread, since they |
626 | | // could be making IPC calls. |
627 | | // |
628 | | // Technically this is a little too conservative since if the interface |
629 | | // defines a "destroy" method, but the destroy method does not accept a |
630 | | // Context parameter specifying a worker thread, the cleanup method |
631 | | // would run on the EventLoop thread normally (when connection is |
632 | | // unbroken), but will not run on the EventLoop thread now (when |
633 | | // connection is broken). Probably some refactoring of the destructor |
634 | | // and invokeDestroy function is possible to make this cleaner and more |
635 | | // consistent. |
636 | 15 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { |
637 | 15 | impl.reset(); |
638 | 15 | CleanupRun(fns); |
639 | 15 | }); mp::ProxyServerBase<gen::FooInterface, FooImplementation>::~ProxyServerBase()::'lambda'()::operator()() Line | Count | Source | 636 | 1 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { | 637 | 1 | impl.reset(); | 638 | 1 | CleanupRun(fns); | 639 | 1 | }); |
mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>::~ProxyServerBase()::'lambda'()::operator()() Line | Count | Source | 636 | 10 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { | 637 | 10 | impl.reset(); | 638 | 10 | CleanupRun(fns); | 639 | 10 | }); |
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::Mining, interfaces::Mining>::~ProxyServerBase()::'lambda'()::operator()() Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::~ProxyServerBase()::'lambda'()::operator()() mp::ProxyServerBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::~ProxyServerBase()::'lambda'()::operator()() Line | Count | Source | 636 | 4 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { | 637 | 4 | impl.reset(); | 638 | 4 | CleanupRun(fns); | 639 | 4 | }); |
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::~ProxyServerBase()::'lambda'()::operator()() |
640 | 15 | } |
641 | 21 | assert(m_context.cleanup_fns.empty()); |
642 | 21 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; |
643 | 21 | } mp::ProxyServerBase<gen::FooInterface, FooImplementation>::~ProxyServerBase() Line | Count | Source | 614 | 1 | { | 615 | 1 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 616 | 1 | if (m_impl) { | 617 | | // If impl is non-null at this point, it means no client is waiting for | 618 | | // the m_impl server object to be destroyed synchronously. This can | 619 | | // happen either if the interface did not define a "destroy" method (see | 620 | | // invokeDestroy method below), or if a destroy method was defined, but | 621 | | // the connection was broken before it could be called. | 622 | | // | 623 | | // In either case, be conservative and run the cleanup on an | 624 | | // asynchronous thread, to avoid destructors or cleanup functions | 625 | | // blocking or deadlocking the current EventLoop thread, since they | 626 | | // could be making IPC calls. | 627 | | // | 628 | | // Technically this is a little too conservative since if the interface | 629 | | // defines a "destroy" method, but the destroy method does not accept a | 630 | | // Context parameter specifying a worker thread, the cleanup method | 631 | | // would run on the EventLoop thread normally (when connection is | 632 | | // unbroken), but will not run on the EventLoop thread now (when | 633 | | // connection is broken). Probably some refactoring of the destructor | 634 | | // and invokeDestroy function is possible to make this cleaner and more | 635 | | // consistent. | 636 | 1 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { | 637 | 1 | impl.reset(); | 638 | 1 | CleanupRun(fns); | 639 | 1 | }); | 640 | 1 | } | 641 | 1 | assert(m_context.cleanup_fns.empty()); | 642 | 1 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 643 | 1 | } |
mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>::~ProxyServerBase() Line | Count | Source | 614 | 10 | { | 615 | 10 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 616 | 10 | if (m_impl) { | 617 | | // If impl is non-null at this point, it means no client is waiting for | 618 | | // the m_impl server object to be destroyed synchronously. This can | 619 | | // happen either if the interface did not define a "destroy" method (see | 620 | | // invokeDestroy method below), or if a destroy method was defined, but | 621 | | // the connection was broken before it could be called. | 622 | | // | 623 | | // In either case, be conservative and run the cleanup on an | 624 | | // asynchronous thread, to avoid destructors or cleanup functions | 625 | | // blocking or deadlocking the current EventLoop thread, since they | 626 | | // could be making IPC calls. | 627 | | // | 628 | | // Technically this is a little too conservative since if the interface | 629 | | // defines a "destroy" method, but the destroy method does not accept a | 630 | | // Context parameter specifying a worker thread, the cleanup method | 631 | | // would run on the EventLoop thread normally (when connection is | 632 | | // unbroken), but will not run on the EventLoop thread now (when | 633 | | // connection is broken). Probably some refactoring of the destructor | 634 | | // and invokeDestroy function is possible to make this cleaner and more | 635 | | // consistent. | 636 | 10 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { | 637 | 10 | impl.reset(); | 638 | 10 | CleanupRun(fns); | 639 | 10 | }); | 640 | 10 | } | 641 | 10 | assert(m_context.cleanup_fns.empty()); | 642 | 10 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 643 | 10 | } |
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::Mining, interfaces::Mining>::~ProxyServerBase() Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::~ProxyServerBase() mp::ProxyServerBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::~ProxyServerBase() Line | Count | Source | 614 | 4 | { | 615 | 4 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 616 | 4 | if (m_impl) { | 617 | | // If impl is non-null at this point, it means no client is waiting for | 618 | | // the m_impl server object to be destroyed synchronously. This can | 619 | | // happen either if the interface did not define a "destroy" method (see | 620 | | // invokeDestroy method below), or if a destroy method was defined, but | 621 | | // the connection was broken before it could be called. | 622 | | // | 623 | | // In either case, be conservative and run the cleanup on an | 624 | | // asynchronous thread, to avoid destructors or cleanup functions | 625 | | // blocking or deadlocking the current EventLoop thread, since they | 626 | | // could be making IPC calls. | 627 | | // | 628 | | // Technically this is a little too conservative since if the interface | 629 | | // defines a "destroy" method, but the destroy method does not accept a | 630 | | // Context parameter specifying a worker thread, the cleanup method | 631 | | // would run on the EventLoop thread normally (when connection is | 632 | | // unbroken), but will not run on the EventLoop thread now (when | 633 | | // connection is broken). Probably some refactoring of the destructor | 634 | | // and invokeDestroy function is possible to make this cleaner and more | 635 | | // consistent. | 636 | 4 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { | 637 | 4 | impl.reset(); | 638 | 4 | CleanupRun(fns); | 639 | 4 | }); | 640 | 4 | } | 641 | 4 | assert(m_context.cleanup_fns.empty()); | 642 | 4 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 643 | 4 | } |
mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::~ProxyServerBase() Line | Count | Source | 614 | 6 | { | 615 | 6 | MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this; | 616 | 6 | if (m_impl) { | 617 | | // If impl is non-null at this point, it means no client is waiting for | 618 | | // the m_impl server object to be destroyed synchronously. This can | 619 | | // happen either if the interface did not define a "destroy" method (see | 620 | | // invokeDestroy method below), or if a destroy method was defined, but | 621 | | // the connection was broken before it could be called. | 622 | | // | 623 | | // In either case, be conservative and run the cleanup on an | 624 | | // asynchronous thread, to avoid destructors or cleanup functions | 625 | | // blocking or deadlocking the current EventLoop thread, since they | 626 | | // could be making IPC calls. | 627 | | // | 628 | | // Technically this is a little too conservative since if the interface | 629 | | // defines a "destroy" method, but the destroy method does not accept a | 630 | | // Context parameter specifying a worker thread, the cleanup method | 631 | | // would run on the EventLoop thread normally (when connection is | 632 | | // unbroken), but will not run on the EventLoop thread now (when | 633 | | // connection is broken). Probably some refactoring of the destructor | 634 | | // and invokeDestroy function is possible to make this cleaner and more | 635 | | // consistent. | 636 | 0 | m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable { | 637 | 0 | impl.reset(); | 638 | 0 | CleanupRun(fns); | 639 | 0 | }); | 640 | 0 | } | 641 | 6 | assert(m_context.cleanup_fns.empty()); | 642 | 6 | MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this; | 643 | 6 | } |
|
644 | | |
645 | | //! If the capnp interface defined a special "destroy" method, as described the |
646 | | //! ProxyClientBase class, this method will be called and synchronously destroy |
647 | | //! m_impl before returning to the client. |
648 | | //! |
649 | | //! If the capnp interface does not define a "destroy" method, this will never |
650 | | //! be called and the ~ProxyServerBase destructor will be responsible for |
651 | | //! deleting m_impl asynchronously, whenever the ProxyServer object gets garbage |
652 | | //! collected by Cap'n Proto. |
653 | | //! |
654 | | //! This method is called in the same way other proxy server methods are called, |
655 | | //! via the serverInvoke function. Basically serverInvoke just calls this as a |
656 | | //! substitute for a non-existent m_impl->destroy() method. If the destroy |
657 | | //! method has any parameters or return values they will be handled in the |
658 | | //! normal way by PassField/ReadField/BuildField functions. Particularly if a |
659 | | //! Context.thread parameter was passed, this method will run on the worker |
660 | | //! thread specified by the client. Otherwise it will run on the EventLoop |
661 | | //! thread, like other server methods without an assigned thread. |
662 | | template <typename Interface, typename Impl> |
663 | | void ProxyServerBase<Interface, Impl>::invokeDestroy() |
664 | 6 | { |
665 | 6 | m_impl.reset(); |
666 | 6 | CleanupRun(m_context.cleanup_fns); |
667 | 6 | } Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::invokeDestroy() mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::invokeDestroy() Line | Count | Source | 664 | 6 | { | 665 | 6 | m_impl.reset(); | 666 | 6 | CleanupRun(m_context.cleanup_fns); | 667 | 6 | } |
|
668 | | |
669 | | //! Map from Connection to local or remote thread handle which will be used over |
670 | | //! that connection. This map will typically only contain one entry, but can |
671 | | //! contain multiple if a single thread makes IPC calls over multiple |
672 | | //! connections. A std::optional value type is used to avoid the map needing to |
673 | | //! be locked while ProxyClient<Thread> objects are constructed, see |
674 | | //! ThreadContext "Synchronization note" below. |
675 | | using ConnThreads = std::map<Connection*, std::optional<ProxyClient<Thread>>>; |
676 | | using ConnThread = ConnThreads::iterator; |
677 | | |
678 | | // Retrieve ProxyClient<Thread> object associated with this connection from a |
679 | | // map, or create a new one and insert it into the map. Return map iterator and |
680 | | // inserted bool. |
681 | | std::tuple<ConnThread, bool> SetThread(GuardedRef<ConnThreads> threads, Connection* connection, const std::function<Thread::Client()>& make_thread); |
682 | | |
683 | | //! The thread_local ThreadContext g_thread_context struct provides information |
684 | | //! about individual threads and a way of communicating between them. Because |
685 | | //! it's a thread local struct, each ThreadContext instance is initialized by |
686 | | //! the thread that owns it. |
687 | | //! |
688 | | //! ThreadContext is used for any client threads created externally which make |
689 | | //! IPC calls, and for server threads created by |
690 | | //! ProxyServer<ThreadMap>::makeThread() which execute IPC calls for clients. |
691 | | //! |
692 | | //! In both cases, the struct holds information like the thread name, and a |
693 | | //! Waiter object where the EventLoop can post incoming IPC requests to execute |
694 | | //! on the thread. The struct also holds ConnThread maps associating the thread |
695 | | //! with local and remote ProxyClient<Thread> objects. |
696 | | struct ThreadContext |
697 | | { |
698 | | //! Identifying string for debug. |
699 | | std::string thread_name; |
700 | | |
701 | | //! Waiter object used to allow remote clients to execute code on this |
702 | | //! thread. For server threads created by |
703 | | //! ProxyServer<ThreadMap>::makeThread(), this is initialized in that |
704 | | //! function. Otherwise, for client threads created externally, this is |
705 | | //! initialized the first time the thread tries to make an IPC call. Having |
706 | | //! a waiter is necessary for threads making IPC calls in case a server they |
707 | | //! are calling expects them to execute a callback during the call, before |
708 | | //! it sends a response. |
709 | | //! |
710 | | //! For IPC client threads, the Waiter pointer is never cleared and the Waiter |
711 | | //! just gets destroyed when the thread does. For server threads created by |
712 | | //! makeThread(), this pointer is set to null in the ~ProxyServer<Thread> as |
713 | | //! a signal for the thread to exit and destroy itself. In both cases, the |
714 | | //! same Waiter object is used across different calls and only created and |
715 | | //! destroyed once for the lifetime of the thread. |
716 | | std::unique_ptr<Waiter> waiter = nullptr; |
717 | | |
718 | | //! When client is making a request to a server, this is the |
719 | | //! `callbackThread` argument it passes in the request, used by the server |
720 | | //! in case it needs to make callbacks into the client that need to execute |
721 | | //! while the client is waiting. This will be set to a local thread object. |
722 | | //! |
723 | | //! Synchronization note: The callback_thread and request_thread maps are |
724 | | //! only ever accessed internally by this thread's destructor and externally |
725 | | //! by Cap'n Proto event loop threads. Since it's possible for IPC client |
726 | | //! threads to make calls over different connections that could have |
727 | | //! different event loops, these maps are guarded by Waiter::m_mutex in case |
728 | | //! different event loop threads add or remove map entries simultaneously. |
729 | | //! However, individual ProxyClient<Thread> objects in the maps will only be |
730 | | //! associated with one event loop and guarded by EventLoop::m_mutex. So |
731 | | //! Waiter::m_mutex does not need to be held while accessing individual |
732 | | //! ProxyClient<Thread> instances, and may even need to be released to |
733 | | //! respect lock order and avoid locking Waiter::m_mutex before |
734 | | //! EventLoop::m_mutex. |
735 | | ConnThreads callback_threads MP_GUARDED_BY(waiter->m_mutex); |
736 | | |
737 | | //! When client is making a request to a server, this is the `thread` |
738 | | //! argument it passes in the request, used to control which thread on |
739 | | //! server will be responsible for executing it. If client call is being |
740 | | //! made from a local thread, this will be a remote thread object returned |
741 | | //! by makeThread. If a client call is being made from a thread currently |
742 | | //! handling a server request, this will be set to the `callbackThread` |
743 | | //! request thread argument passed in that request. |
744 | | //! |
745 | | //! Synchronization note: \ref callback_threads note applies here as well. |
746 | | ConnThreads request_threads MP_GUARDED_BY(waiter->m_mutex); |
747 | | |
748 | | //! Whether this thread is a capnp event loop thread. Not really used except |
749 | | //! to assert false if there's an attempt to execute a blocking operation |
750 | | //! which could deadlock the thread. |
751 | | bool loop_thread = false; |
752 | | }; |
753 | | |
754 | | template<typename T, typename Fn> |
755 | | kj::Promise<T> ProxyServer<Thread>::post(Fn&& fn) |
756 | 26 | { |
757 | 26 | auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again. |
758 | 26 | auto cancel_monitor_ptr = kj::heap<CancelMonitor>(); |
759 | 26 | CancelMonitor& cancel_monitor = *cancel_monitor_ptr; |
760 | | // Keep a reference to the ProxyServer<Thread> instance by assigning it to |
761 | | // the self variable. ProxyServer instances are reference-counted and if the |
762 | | // client drops its reference, this variable keeps the instance alive until |
763 | | // the thread finishes executing. The self variable needs to be destroyed on |
764 | | // the event loop thread so it is freed in a sync() call below. |
765 | 26 | auto self = thisCap(); |
766 | 26 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { |
767 | 26 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. |
768 | 26 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { |
769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing |
770 | | // this lambda, so the next ProxyServer<Thread>::post() call can |
771 | | // immediately call waiter->post(). It is important to do this |
772 | | // before calling fn() because fn() can make an IPC call back to the |
773 | | // client, which can make another IPC call to this server thread. |
774 | | // (This typically happens when IPC methods take std::function |
775 | | // parameters.) When this happens the second call to the server |
776 | | // thread should not be blocked waiting for the first call. |
777 | 26 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { |
778 | 26 | ready_fulfiller->fulfill(); |
779 | 26 | ready_fulfiller = nullptr; |
780 | 26 | }); kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); |
|
781 | 26 | std::optional<T> result_value; |
782 | 26 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Line | Count | Source | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Line | Count | Source | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Line | Count | Source | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Line | Count | Source | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda0'()::operator()() const Line | Count | Source | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; |
|
783 | 26 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { |
784 | | // Destroy CancelMonitor here before fulfilling or rejecting the |
785 | | // promise so it doesn't get triggered when the promise is |
786 | | // destroyed. |
787 | 26 | cancel_monitor_ptr = nullptr; |
788 | | // Send results to the fulfiller. Technically it would be ok to |
789 | | // skip this if promise was canceled, but it's simpler to just |
790 | | // do it unconditionally. |
791 | 26 | KJ_IF_MAYBE(e, exception) { |
792 | 0 | assert(!result_value); |
793 | 0 | result_fulfiller->reject(kj::mv(*e)); |
794 | 26 | } else { |
795 | 26 | assert(result_value); |
796 | 26 | result_fulfiller->fulfill(kj::mv(*result_value)); |
797 | 26 | result_value.reset(); |
798 | 26 | } |
799 | 26 | result_fulfiller = nullptr; |
800 | | // Use evalLater to destroy the ProxyServer<Thread> self |
801 | | // reference, if it is the last reference, because the |
802 | | // ProxyServer<Thread> destructor needs to join the thread, |
803 | | // which can't happen until this sync() block has exited. |
804 | 26 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Line | Count | Source | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Line | Count | Source | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Line | Count | Source | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Line | Count | Source | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()()::'lambda'()::operator()() const Line | Count | Source | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); |
|
805 | 26 | }); kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Line | Count | Source | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 0 | assert(!result_value); | 793 | 0 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Line | Count | Source | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 0 | assert(!result_value); | 793 | 0 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Line | Count | Source | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 0 | assert(!result_value); | 793 | 0 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Line | Count | Source | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 0 | assert(!result_value); | 793 | 0 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()()::'lambda1'()::operator()() Line | Count | Source | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 0 | assert(!result_value); | 793 | 0 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); |
|
806 | 26 | }); kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 768 | 4 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); | 781 | 4 | std::optional<T> result_value; | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 4 | assert(!result_value); | 793 | 4 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); | 806 | 4 | }); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 768 | 4 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); | 781 | 4 | std::optional<T> result_value; | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 4 | assert(!result_value); | 793 | 4 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); | 806 | 4 | }); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()()::'lambda'()::operator()() Line | Count | Source | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); |
|
807 | | // Assert that calling Waiter::post did not fail. It could only return |
808 | | // false if a new function was posted before the previous one finished |
809 | | // executing, but new functions are only posted when m_thread_ready is |
810 | | // signaled, so this should never happen. |
811 | 26 | assert(posted); |
812 | 26 | return kj::mv(result.promise); |
813 | 26 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&)::'lambda'()::operator()() Line | Count | Source | 766 | 6 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 6 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 6 | assert(posted); | 812 | 6 | return kj::mv(result.promise); | 813 | 6 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&)::'lambda'()::operator()() kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&)::'lambda'()::operator()() Line | Count | Source | 766 | 4 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 4 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 4 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); | 781 | 4 | std::optional<T> result_value; | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 4 | assert(!result_value); | 793 | 4 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); | 806 | 4 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 4 | assert(posted); | 812 | 4 | return kj::mv(result.promise); | 813 | 4 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'lambda'()::operator()() Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&)::'lambda'()::operator()() kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&)::'lambda'()::operator()() Line | Count | Source | 766 | 4 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 4 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 4 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); | 781 | 4 | std::optional<T> result_value; | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 4 | assert(!result_value); | 793 | 4 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); | 806 | 4 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 4 | assert(posted); | 812 | 4 | return kj::mv(result.promise); | 813 | 4 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&)::'lambda'()::operator()() Line | Count | Source | 766 | 6 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 6 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 6 | assert(posted); | 812 | 6 | return kj::mv(result.promise); | 813 | 6 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&)::'lambda'()::operator()() Line | Count | Source | 766 | 6 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 6 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 6 | assert(posted); | 812 | 6 | return kj::mv(result.promise); | 813 | 6 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); |
|
814 | 26 | m_thread_ready = kj::mv(ready.promise); |
815 | 26 | return ret; |
816 | 26 | } kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeEchoParams, ipc::capnp::messages::Init::MakeEchoResults>>&&) Line | Count | Source | 756 | 6 | { | 757 | 6 | auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again. | 758 | 6 | auto cancel_monitor_ptr = kj::heap<CancelMonitor>(); | 759 | 6 | CancelMonitor& cancel_monitor = *cancel_monitor_ptr; | 760 | | // Keep a reference to the ProxyServer<Thread> instance by assigning it to | 761 | | // the self variable. ProxyServer instances are reference-counted and if the | 762 | | // client drops its reference, this variable keeps the instance alive until | 763 | | // the thread finishes executing. The self variable needs to be destroyed on | 764 | | // the event loop thread so it is freed in a sync() call below. | 765 | 6 | auto self = thisCap(); | 766 | 6 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 6 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 6 | assert(posted); | 812 | 6 | return kj::mv(result.promise); | 813 | 6 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); | 814 | 6 | m_thread_ready = kj::mv(ready.promise); | 815 | 6 | return ret; | 816 | 6 | } |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeMiningParams, ipc::capnp::messages::Init::MakeMiningResults>>&&) kj::Promise<mp::Accessor<mp::init_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::init_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::init_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&, mp::ServerRet<mp::Accessor<mp::init_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Init>, capnp::CallContext<ipc::capnp::messages::Init::MakeRpcParams, ipc::capnp::messages::Init::MakeRpcResults>>&&) Line | Count | Source | 756 | 4 | { | 757 | 4 | auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again. | 758 | 4 | auto cancel_monitor_ptr = kj::heap<CancelMonitor>(); | 759 | 4 | CancelMonitor& cancel_monitor = *cancel_monitor_ptr; | 760 | | // Keep a reference to the ProxyServer<Thread> instance by assigning it to | 761 | | // the self variable. ProxyServer instances are reference-counted and if the | 762 | | // client drops its reference, this variable keeps the instance alive until | 763 | | // the thread finishes executing. The self variable needs to be destroyed on | 764 | | // the event loop thread so it is freed in a sync() call below. | 765 | 4 | auto self = thisCap(); | 766 | 4 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 4 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 4 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); | 781 | 4 | std::optional<T> result_value; | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 4 | assert(!result_value); | 793 | 4 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); | 806 | 4 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 4 | assert(posted); | 812 | 4 | return kj::mv(result.promise); | 813 | 4 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); | 814 | 4 | m_thread_ready = kj::mv(ready.promise); | 815 | 4 | return ret; | 816 | 4 | } |
Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsTestChainParams, ipc::capnp::messages::Mining::IsTestChainResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::IsInitialBlockDownloadParams, ipc::capnp::messages::Mining::IsInitialBlockDownloadResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 22>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTipParams, ipc::capnp::messages::Mining::GetTipResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::CurrentTip, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timeout, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<uint256, std::chrono::duration<double, std::ratio<1l, 1000l>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>>, mp::TypeList<node::BlockCreateOptions const&, bool>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Cooldown, 1>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>> const&, mp::TypeList<node::BlockCreateOptions const&, bool>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CreateNewBlockParams, ipc::capnp::messages::Mining::CreateNewBlockResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<CBlock const&, node::BlockCheckOptions const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::CheckBlockParams, ipc::capnp::messages::Mining::CheckBlockResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Block, 17>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Reason, 18>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Debug, 18>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>> const&, mp::TypeList<CBlock const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::SubmitBlockParams, ipc::capnp::messages::Mining::SubmitBlockResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Txids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<false>, std::allocator<transaction_identifier<false>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByTxIDParams, ipc::capnp::messages::Mining::GetTransactionsByTxIDResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Wtxids, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::vector<transaction_identifier<true>, std::allocator<transaction_identifier<true>>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::GetTransactionsByWitnessIDParams, ipc::capnp::messages::Mining::GetTransactionsByWitnessIDResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::DestroyParams, ipc::capnp::messages::BlockTemplate::DestroyResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockHeaderParams, ipc::capnp::messages::BlockTemplate::GetBlockHeaderResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetBlockParams, ipc::capnp::messages::BlockTemplate::GetBlockResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxFeesParams, ipc::capnp::messages::BlockTemplate::GetTxFeesResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetTxSigopsParams, ipc::capnp::messages::BlockTemplate::GetTxSigopsResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseTxParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseTxResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathParams, ipc::capnp::messages::BlockTemplate::GetCoinbaseMerklePathResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>>, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Version, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Timestamp, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Nonce, 1>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Coinbase, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 2>, mp::ServerCall>>>>> const&, mp::TypeList<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction const>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&) Unexecuted instantiation: kj::Promise<mp::Accessor<mp::mining_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::mining_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::mining_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<node::BlockWaitOptions>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&, mp::ServerField<1, mp::Accessor<mp::mining_fields::Options, 17>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<node::BlockWaitOptions>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::WaitNextParams, ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&) kj::Promise<mp::Accessor<mp::rpc_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::rpc_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::rpc_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>>, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Request, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::Uri, 17>, mp::ServerField<1, mp::Accessor<mp::rpc_fields::User, 17>, mp::ServerRet<mp::Accessor<mp::rpc_fields::Result, 18>, mp::ServerCall>>>> const&, mp::TypeList<UniValue, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Rpc>, capnp::CallContext<ipc::capnp::messages::Rpc::ExecuteRpcParams, ipc::capnp::messages::Rpc::ExecuteRpcResults>>&&) Line | Count | Source | 756 | 4 | { | 757 | 4 | auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again. | 758 | 4 | auto cancel_monitor_ptr = kj::heap<CancelMonitor>(); | 759 | 4 | CancelMonitor& cancel_monitor = *cancel_monitor_ptr; | 760 | | // Keep a reference to the ProxyServer<Thread> instance by assigning it to | 761 | | // the self variable. ProxyServer instances are reference-counted and if the | 762 | | // client drops its reference, this variable keeps the instance alive until | 763 | | // the thread finishes executing. The self variable needs to be destroyed on | 764 | | // the event loop thread so it is freed in a sync() call below. | 765 | 4 | auto self = thisCap(); | 766 | 4 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 4 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 4 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 4 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 4 | ready_fulfiller->fulfill(); | 779 | 4 | ready_fulfiller = nullptr; | 780 | 4 | }); | 781 | 4 | std::optional<T> result_value; | 782 | 4 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 4 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 4 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 4 | KJ_IF_MAYBE(e, exception) { | 792 | 4 | assert(!result_value); | 793 | 4 | result_fulfiller->reject(kj::mv(*e)); | 794 | 4 | } else { | 795 | 4 | assert(result_value); | 796 | 4 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 4 | result_value.reset(); | 798 | 4 | } | 799 | 4 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 4 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 4 | }); | 806 | 4 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 4 | assert(posted); | 812 | 4 | return kj::mv(result.promise); | 813 | 4 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); | 814 | 4 | m_thread_ready = kj::mv(ready.promise); | 815 | 4 | return ret; | 816 | 4 | } |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>, mp::ServerDestroy, mp::TypeList<>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&, mp::ServerDestroy const&, mp::TypeList<>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::DestroyParams, ipc::capnp::messages::Echo::DestroyResults>>&&) Line | Count | Source | 756 | 6 | { | 757 | 6 | auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again. | 758 | 6 | auto cancel_monitor_ptr = kj::heap<CancelMonitor>(); | 759 | 6 | CancelMonitor& cancel_monitor = *cancel_monitor_ptr; | 760 | | // Keep a reference to the ProxyServer<Thread> instance by assigning it to | 761 | | // the self variable. ProxyServer instances are reference-counted and if the | 762 | | // client drops its reference, this variable keeps the instance alive until | 763 | | // the thread finishes executing. The self variable needs to be destroyed on | 764 | | // the event loop thread so it is freed in a sync() call below. | 765 | 6 | auto self = thisCap(); | 766 | 6 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 6 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 6 | assert(posted); | 812 | 6 | return kj::mv(result.promise); | 813 | 6 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); | 814 | 6 | m_thread_ready = kj::mv(ready.promise); | 815 | 6 | return ret; | 816 | 6 | } |
kj::Promise<mp::Accessor<mp::echo_fields::Context, 17>> mp::ProxyServer<mp::Thread>::post<capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>, std::enable_if<std::is_same<decltype(mp::Accessor<mp::echo_fields::Context, 17>::get(fp1.call_context.getParams())), mp::Context::Reader>::value, kj::Promise<mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>::CallContext>>::type mp::PassField<mp::Accessor<mp::echo_fields::Context, 17>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>>, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>>(mp::Priority<1>, mp::TypeList<>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&, mp::ServerField<1, mp::Accessor<mp::echo_fields::Echo, 17>, mp::ServerRet<mp::Accessor<mp::echo_fields::Result, 18>, mp::ServerCall>> const&, mp::TypeList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&>&&)::'lambda'(mp::CancelMonitor&)>(mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Echo>, capnp::CallContext<ipc::capnp::messages::Echo::EchoParams, ipc::capnp::messages::Echo::EchoResults>>&&) Line | Count | Source | 756 | 6 | { | 757 | 6 | auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again. | 758 | 6 | auto cancel_monitor_ptr = kj::heap<CancelMonitor>(); | 759 | 6 | CancelMonitor& cancel_monitor = *cancel_monitor_ptr; | 760 | | // Keep a reference to the ProxyServer<Thread> instance by assigning it to | 761 | | // the self variable. ProxyServer instances are reference-counted and if the | 762 | | // client drops its reference, this variable keeps the instance alive until | 763 | | // the thread finishes executing. The self variable needs to be destroyed on | 764 | | // the event loop thread so it is freed in a sync() call below. | 765 | 6 | auto self = thisCap(); | 766 | 6 | auto ret = m_thread_ready.then([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 767 | 6 | auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value. | 768 | 6 | bool posted = m_thread_context.waiter->post([this, self = std::move(self), fn = std::forward<Fn>(fn), ready_fulfiller = kj::mv(ready_fulfiller), result_fulfiller = kj::mv(result.fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 769 | | // Fulfill ready.promise now, as soon as the Waiter starts executing | 770 | | // this lambda, so the next ProxyServer<Thread>::post() call can | 771 | | // immediately call waiter->post(). It is important to do this | 772 | | // before calling fn() because fn() can make an IPC call back to the | 773 | | // client, which can make another IPC call to this server thread. | 774 | | // (This typically happens when IPC methods take std::function | 775 | | // parameters.) When this happens the second call to the server | 776 | | // thread should not be blocked waiting for the first call. | 777 | 6 | m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable { | 778 | 6 | ready_fulfiller->fulfill(); | 779 | 6 | ready_fulfiller = nullptr; | 780 | 6 | }); | 781 | 6 | std::optional<T> result_value; | 782 | 6 | kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })}; | 783 | 6 | m_loop->sync([this, &result_value, &exception, self = kj::mv(self), result_fulfiller = kj::mv(result_fulfiller), cancel_monitor_ptr = kj::mv(cancel_monitor_ptr)]() mutable { | 784 | | // Destroy CancelMonitor here before fulfilling or rejecting the | 785 | | // promise so it doesn't get triggered when the promise is | 786 | | // destroyed. | 787 | 6 | cancel_monitor_ptr = nullptr; | 788 | | // Send results to the fulfiller. Technically it would be ok to | 789 | | // skip this if promise was canceled, but it's simpler to just | 790 | | // do it unconditionally. | 791 | 6 | KJ_IF_MAYBE(e, exception) { | 792 | 6 | assert(!result_value); | 793 | 6 | result_fulfiller->reject(kj::mv(*e)); | 794 | 6 | } else { | 795 | 6 | assert(result_value); | 796 | 6 | result_fulfiller->fulfill(kj::mv(*result_value)); | 797 | 6 | result_value.reset(); | 798 | 6 | } | 799 | 6 | result_fulfiller = nullptr; | 800 | | // Use evalLater to destroy the ProxyServer<Thread> self | 801 | | // reference, if it is the last reference, because the | 802 | | // ProxyServer<Thread> destructor needs to join the thread, | 803 | | // which can't happen until this sync() block has exited. | 804 | 6 | m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {})); | 805 | 6 | }); | 806 | 6 | }); | 807 | | // Assert that calling Waiter::post did not fail. It could only return | 808 | | // false if a new function was posted before the previous one finished | 809 | | // executing, but new functions are only posted when m_thread_ready is | 810 | | // signaled, so this should never happen. | 811 | 6 | assert(posted); | 812 | 6 | return kj::mv(result.promise); | 813 | 6 | }).attach(kj::heap<CancelProbe>(cancel_monitor)); | 814 | 6 | m_thread_ready = kj::mv(ready.promise); | 815 | 6 | return ret; | 816 | 6 | } |
|
817 | | |
818 | | //! Given stream file descriptor, make a new ProxyClient object to send requests |
819 | | //! over the stream. Also create a new Connection object embedded in the |
820 | | //! client that is freed when the client is closed. |
821 | | template <typename InitInterface> |
822 | | std::unique_ptr<ProxyClient<InitInterface>> ConnectStream(EventLoop& loop, int fd) |
823 | 10 | { |
824 | 10 | typename InitInterface::Client init_client(nullptr); |
825 | 10 | std::unique_ptr<Connection> connection; |
826 | 10 | loop.sync([&] { |
827 | 10 | auto stream = |
828 | 10 | loop.m_io_context.lowLevelProvider->wrapSocketFd(fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP); |
829 | 10 | connection = std::make_unique<Connection>(loop, kj::mv(stream)); |
830 | 10 | init_client = connection->m_rpc_system->bootstrap(ServerVatId().vat_id).castAs<InitInterface>(); |
831 | 10 | Connection* connection_ptr = connection.get(); |
832 | 10 | connection->onDisconnect([&loop, connection_ptr] { |
833 | 0 | MP_LOG(loop, Log::Warning) << "IPC client: unexpected network disconnect."; |
834 | 0 | delete connection_ptr; |
835 | 0 | }); |
836 | 10 | }); |
837 | 10 | return std::make_unique<ProxyClient<InitInterface>>( |
838 | 10 | kj::mv(init_client), connection.release(), /* destroy_connection= */ true); |
839 | 10 | } |
840 | | |
841 | | //! Given stream and init objects, construct a new ProxyServer object that |
842 | | //! handles requests from the stream by calling the init object. Embed the |
843 | | //! ProxyServer in a Connection object that is stored and erased if |
844 | | //! disconnected. This should be called from the event loop thread. |
845 | | template <typename InitInterface, typename InitImpl> |
846 | | void _Serve(EventLoop& loop, kj::Own<kj::AsyncIoStream>&& stream, InitImpl& init) |
847 | 10 | { |
848 | 10 | loop.m_incoming_connections.emplace_front(loop, kj::mv(stream), [&](Connection& connection) { |
849 | | // Disable deleter so proxy server object doesn't attempt to delete the |
850 | | // init implementation when the proxy client is destroyed or |
851 | | // disconnected. |
852 | 10 | return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection); |
853 | 10 | }); |
854 | 10 | auto it = loop.m_incoming_connections.begin(); |
855 | 10 | MP_LOG(loop, Log::Info) << "IPC server: socket connected."; |
856 | 10 | it->onDisconnect([&loop, it] { |
857 | 10 | MP_LOG(loop, Log::Info) << "IPC server: socket disconnected."; |
858 | 10 | loop.m_incoming_connections.erase(it); |
859 | 10 | }); |
860 | 10 | } |
861 | | |
862 | | //! Given connection receiver and an init object, handle incoming connections by |
863 | | //! calling _Serve, to create ProxyServer objects and forward requests to the |
864 | | //! init object. |
865 | | template <typename InitInterface, typename InitImpl> |
866 | | void _Listen(EventLoop& loop, kj::Own<kj::ConnectionReceiver>&& listener, InitImpl& init) |
867 | 12 | { |
868 | 12 | auto* ptr = listener.get(); |
869 | 12 | loop.m_task_set->add(ptr->accept().then( |
870 | 12 | [&loop, &init, listener = kj::mv(listener)](kj::Own<kj::AsyncIoStream>&& stream) mutable { |
871 | 9 | _Serve<InitInterface>(loop, kj::mv(stream), init); |
872 | 9 | _Listen<InitInterface>(loop, kj::mv(listener), init); |
873 | 9 | })); |
874 | 12 | } |
875 | | |
876 | | //! Given stream file descriptor and an init object, handle requests on the |
877 | | //! stream by calling methods on the Init object. |
878 | | template <typename InitInterface, typename InitImpl> |
879 | | void ServeStream(EventLoop& loop, int fd, InitImpl& init) |
880 | 1 | { |
881 | 1 | _Serve<InitInterface>( |
882 | 1 | loop, loop.m_io_context.lowLevelProvider->wrapSocketFd(fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP), init); |
883 | 1 | } |
884 | | |
885 | | //! Given listening socket file descriptor and an init object, handle incoming |
886 | | //! connections and requests by calling methods on the Init object. |
887 | | template <typename InitInterface, typename InitImpl> |
888 | | void ListenConnections(EventLoop& loop, int fd, InitImpl& init) |
889 | 3 | { |
890 | 3 | loop.sync([&]() { |
891 | 3 | _Listen<InitInterface>(loop, |
892 | 3 | loop.m_io_context.lowLevelProvider->wrapListenSocketFd(fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP), |
893 | 3 | init); |
894 | 3 | }); |
895 | 3 | } |
896 | | |
897 | | extern thread_local ThreadContext g_thread_context; // NOLINT(bitcoin-nontrivial-threadlocal) |
898 | | // Silence nonstandard bitcoin tidy error "Variable with non-trivial destructor |
899 | | // cannot be thread_local" which should not be a problem on modern platforms, and |
900 | | // could lead to a small memory leak at worst on older ones. |
901 | | |
902 | | } // namespace mp |
903 | | |
904 | | #endif // MP_PROXY_IO_H |