Coverage Report

Created: 2026-08-05 14:35

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 <algorithm>
17
#include <condition_variable>
18
#include <cstdlib>
19
#include <functional>
20
#include <kj/function.h>
21
#include <map>
22
#include <memory>
23
#include <optional>
24
#include <sstream>
25
#include <string>
26
#include <thread>
27
28
namespace mp {
29
struct ThreadContext;
30
struct Listener;
31
32
struct InvokeContext
33
{
34
    Connection& connection;
35
};
36
37
struct ClientInvokeContext : InvokeContext
38
{
39
    ThreadContext& thread_context;
40
    ClientInvokeContext(Connection& conn, ThreadContext& thread_context)
41
43
        : InvokeContext{conn}, thread_context{thread_context}
42
43
    {
43
43
    }
44
};
45
46
template <typename ProxyServer, typename CallContext_>
47
struct ServerInvokeContext : InvokeContext
48
{
49
    using CallContext = CallContext_;
50
51
    ProxyServer& proxy_server;
52
    CallContext& call_context;
53
    int req;
54
    //! For IPC methods that execute asynchronously, not on the event-loop
55
    //! thread: lock preventing the event-loop thread from freeing the params or
56
    //! results structs if the request is canceled while the worker thread is
57
    //! reading params (`call_context.getParams()`) or writing results
58
    //! (`call_context.getResults()`).
59
    Lock* cancel_lock{nullptr};
60
    //! For IPC methods that execute asynchronously, not on the event-loop
61
    //! thread, this is set to true if the IPC call was canceled by the client
62
    //! or canceled by a disconnection. If the call runs on the event-loop
63
    //! thread, it can't be canceled. This should be accessed with cancel_lock
64
    //! held if it is not null, since in the asynchronous case it is accessed
65
    //! from multiple threads.
66
    bool request_canceled{false};
67
68
    ServerInvokeContext(ProxyServer& proxy_server, CallContext& call_context, int req)
69
69
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
69
    {
71
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
69
1
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
1
    {
71
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
69
1
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
1
    {
71
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
69
1
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
1
    {
71
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
69
1
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
1
    {
71
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
69
1
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
1
    {
71
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
69
1
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
1
    {
71
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
69
1
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
1
    {
71
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
69
10
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
10
    {
71
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
69
12
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
12
    {
71
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
69
8
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
8
    {
71
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::ServerInvokeContext(mp::ProxyServer<ipc::capnp::messages::BlockTemplate>&, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>&, 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)
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)
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
69
8
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
8
    {
71
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
69
12
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
12
    {
71
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
69
12
        : InvokeContext{*proxy_server.m_context.connection}, proxy_server{proxy_server}, call_context{call_context}, req{req}
70
12
    {
71
12
    }
72
};
73
74
template <typename Interface, typename Params, typename Results>
75
using ServerContext = ServerInvokeContext<ProxyServer<Interface>, ::capnp::CallContext<Params, Results>>;
76
77
template <>
78
struct ProxyClient<Thread> : public ProxyClientBase<Thread, ::capnp::Void>
79
{
80
    using ProxyClientBase::ProxyClientBase;
81
    // https://stackoverflow.com/questions/22357887/comparing-two-mapiterators-why-does-it-need-the-copy-constructor-of-stdpair
82
    ProxyClient(const ProxyClient&) = delete;
83
    ~ProxyClient();
84
85
    //! Reference to callback function that is run if there is a sudden
86
    //! disconnect and the Connection object is destroyed before this
87
    //! ProxyClient<Thread> object. The callback will destroy this object and
88
    //! remove its entry from the thread's request_threads or callback_threads
89
    //! map. It will also reset m_disconnect_cb so the destructor does not
90
    //! access it. In the normal case where there is no sudden disconnect, the
91
    //! destructor will unregister m_disconnect_cb so the callback is never run.
92
    //! Since this variable is accessed from multiple threads, accesses should
93
    //! be guarded with the associated Waiter::m_mutex.
94
    std::optional<CleanupIt> m_disconnect_cb;
95
};
96
97
template <>
98
struct ProxyServer<Thread> final : public Thread::Server
99
{
100
public:
101
    ProxyServer(Connection& connection, ThreadContext& thread_context, std::thread&& thread);
102
    ~ProxyServer();
103
    kj::Promise<void> getName(GetNameContext context) override;
104
105
    //! Run a callback function fn returning T on this thread. The function will
106
    //! be queued and executed as soon as the thread is idle, and when fn
107
    //! returns, the promise returned by this method will be fulfilled with the
108
    //! value fn returned.
109
    template<typename T, typename Fn>
110
    kj::Promise<T> post(Fn&& fn);
111
112
    EventLoopRef m_loop;
113
    ThreadContext& m_thread_context;
114
    std::thread m_thread;
115
    //! Promise signaled when m_thread_context.waiter is ready and there is no
116
    //! post() callback function waiting to execute.
117
    kj::Promise<void> m_thread_ready{kj::READY_NOW};
118
};
119
120
//! Handler for kj::TaskSet failed task events.
121
class LoggingErrorHandler : public kj::TaskSet::ErrorHandler
122
{
123
public:
124
30
    LoggingErrorHandler(EventLoop& loop) : m_loop(loop) {}
125
    void taskFailed(kj::Exception&& exception) override;
126
    EventLoop& m_loop;
127
};
128
129
//! Log flags. Update stringify function if changed!
130
enum class Log {
131
    Trace = 0,
132
    Debug,
133
    Info,
134
    Warning,
135
    Error,
136
    Raise,
137
};
138
139
kj::StringPtr KJ_STRINGIFY(Log flags);
140
141
struct LogMessage {
142
143
    //! Message to be logged
144
    std::string message;
145
146
    //! The severity level of this message
147
    Log level;
148
};
149
150
using LogFn = std::function<void(LogMessage)>;
151
152
struct LogOptions {
153
154
    //! External logging callback.
155
    LogFn log_fn;
156
157
    //! Maximum number of characters to use when representing
158
    //! request and response structs as strings.
159
    size_t max_chars{200};
160
161
    //! Messages with a severity level less than log_level will not be
162
    //! reported.
163
    Log log_level{Log::Trace};
164
};
165
166
class Logger
167
{
168
public:
169
743
    Logger(const LogOptions& options, Log log_level) : m_options(options), m_log_level(log_level) {}
170
171
    Logger(Logger&&) = delete;
172
    Logger& operator=(Logger&&) = delete;
173
    Logger(const Logger&) = delete;
174
    Logger& operator=(const Logger&) = delete;
175
176
    ~Logger() noexcept(false)
177
743
    {
178
743
        if (enabled()) m_options.log_fn({std::move(m_buffer).str(), m_log_level});
179
743
    }
180
181
    template <typename T>
182
    friend Logger& operator<<(Logger& logger, T&& value)
183
3.58k
    {
184
3.58k
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
3.58k
        return logger;
186
3.58k
    }
mp::Logger& mp::operator<<<mp::ProxyClientBase<gen::FooInterface, FooImplementation>*>(mp::Logger&, mp::ProxyClientBase<gen::FooInterface, FooImplementation>*&&)
Line
Count
Source
183
3
    {
184
3
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
3
        return logger;
186
3
    }
mp::Logger& mp::operator<<<char const (&) [2]>(mp::Logger&, char const (&) [2])
Line
Count
Source
183
905
    {
184
905
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
905
        return logger;
186
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
183
908
    {
184
908
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
908
        return logger;
186
908
    }
mp::Logger& mp::operator<<<char const (&) [10]>(mp::Logger&, char const (&) [10])
Line
Count
Source
183
72
    {
184
72
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
72
        return logger;
186
72
    }
mp::Logger& mp::operator<<<char const (&) [3]>(mp::Logger&, char const (&) [3])
Line
Count
Source
183
536
    {
184
536
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
536
        return logger;
186
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
183
3
    {
184
3
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
3
        return logger;
186
3
    }
mp::Logger& mp::operator<<<char const (&) [13]>(mp::Logger&, char const (&) [13])
Line
Count
Source
183
72
    {
184
72
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
72
        return logger;
186
72
    }
mp::Logger& mp::operator<<<char const (&) [12]>(mp::Logger&, char const (&) [12])
Line
Count
Source
183
134
    {
184
134
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
134
        return logger;
186
134
    }
mp::Logger& mp::operator<<<char const (&) [68]>(mp::Logger&, char const (&) [68])
Line
Count
Source
183
5
    {
184
5
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
5
        return logger;
186
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
183
93
    {
184
93
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
93
        return logger;
186
93
    }
mp::Logger& mp::operator<<<char const*>(mp::Logger&, char const*&&)
Line
Count
Source
183
148
    {
184
148
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
148
        return logger;
186
148
    }
mp::Logger& mp::operator<<<char const (&) [19]>(mp::Logger&, char const (&) [19])
Line
Count
Source
183
62
    {
184
62
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
62
        return logger;
186
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<<<int&>(mp::Logger&, int&)
Line
Count
Source
183
95
    {
184
95
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
95
        return logger;
186
95
    }
mp::Logger& mp::operator<<<char const (&) [27]>(mp::Logger&, char const (&) [27])
Line
Count
Source
183
112
    {
184
112
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
112
        return logger;
186
112
    }
mp::Logger& mp::operator<<<char const (&) [15]>(mp::Logger&, char const (&) [15])
Line
Count
Source
183
43
    {
184
43
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
43
        return logger;
186
43
    }
mp::Logger& mp::operator<<<int const&>(mp::Logger&, int const&)
Line
Count
Source
183
43
    {
184
43
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
43
        return logger;
186
43
    }
mp::Logger& mp::operator<<<char const (&) [16]>(mp::Logger&, char const (&) [16])
Line
Count
Source
183
43
    {
184
43
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
43
        return logger;
186
43
    }
mp::Logger& mp::operator<<<char const (&) [31]>(mp::Logger&, char const (&) [31])
Line
Count
Source
183
26
    {
184
26
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
26
        return logger;
186
26
    }
mp::Logger& mp::operator<<<char const (&) [33]>(mp::Logger&, char const (&) [33])
Line
Count
Source
183
10
    {
184
10
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
10
        return logger;
186
10
    }
mp::Logger& mp::operator<<<char const (&) [20]>(mp::Logger&, char const (&) [20])
Line
Count
Source
183
34
    {
184
34
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
34
        return logger;
186
34
    }
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
183
18
    {
184
18
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
18
        return logger;
186
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
183
30
    {
184
30
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
30
        return logger;
186
30
    }
mp::Logger& mp::operator<<<char const (&) [30]>(mp::Logger&, char const (&) [30])
Line
Count
Source
183
10
    {
184
10
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
10
        return logger;
186
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
183
18
    {
184
18
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
18
        return logger;
186
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
183
12
    {
184
12
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
12
        return logger;
186
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
183
18
    {
184
18
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
18
        return logger;
186
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
183
8
    {
184
8
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
8
        return logger;
186
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
183
114
    {
184
114
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
114
        return logger;
186
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
183
8
    {
184
8
        if (logger.enabled()) logger.m_buffer << std::forward<T>(value);
185
8
        return logger;
186
8
    }
187
188
    template <typename T>
189
    friend Logger& operator<<(Logger&& logger, T&& value)
190
    {
191
        return logger << std::forward<T>(value);
192
    }
193
194
    explicit operator bool() const
195
743
    {
196
743
        return enabled();
197
743
    }
198
199
private:
200
    bool enabled() const
201
5.06k
    {
202
5.06k
        return m_options.log_fn && m_log_level >= m_options.log_level;
203
5.06k
    }
204
205
    const LogOptions& m_options;
206
    Log m_log_level;
207
    std::ostringstream m_buffer;
208
};
209
210
4.32k
#define MP_LOGPLAIN(loop, ...) if (mp::Logger logger{(loop).m_log_opts, __VA_ARGS__}; logger) logger
211
212
566
#define MP_LOG(loop, ...) MP_LOGPLAIN(loop, __VA_ARGS__) << "{" << LongThreadName((loop).m_exe_name) << "} "
213
214
std::string LongThreadName(const char* exe_name);
215
216
//! Event loop implementation.
217
//!
218
//! Cap'n Proto threading model is very simple: all I/O operations are
219
//! asynchronous and must be performed on a single thread. This includes:
220
//!
221
//! - Code starting an asynchronous operation (calling a function that returns a
222
//!   promise object)
223
//! - Code notifying that an asynchronous operation is complete (code using a
224
//!   fulfiller object)
225
//! - Code handling a completed operation (code chaining or waiting for a promise)
226
//!
227
//! All of this code needs to access shared state, and there is no mutex that
228
//! can be acquired to lock this state because Cap'n Proto
229
//! assumes it will only be accessed from one thread. So all this code needs to
230
//! actually run on one thread, and the EventLoop::loop() method is the entry point for
231
//! this thread. ProxyClient and ProxyServer objects that use other threads and
232
//! need to perform I/O operations post to this thread using EventLoop::post()
233
//! and EventLoop::sync() methods.
234
//!
235
//! Specifically, because ProxyClient methods can be called from arbitrary
236
//! threads, and ProxyServer methods can run on arbitrary threads, ProxyClient
237
//! methods use the EventLoop thread to send requests, and ProxyServer methods
238
//! use the thread to return results.
239
//!
240
//! Based on https://groups.google.com/d/msg/capnproto/TuQFF1eH2-M/g81sHaTAAQAJ
241
class EventLoop
242
{
243
public:
244
    //! Construct event loop object with default logging options.
245
    EventLoop(const char* exe_name, LogFn log_fn, void* context = nullptr)
246
1
        : EventLoop(exe_name, LogOptions{std::move(log_fn)}, context){}
247
248
    //! Construct event loop object with specified logging options.
249
    EventLoop(const char* exe_name, LogOptions log_opts, void* context = nullptr);
250
251
    //! Backwards-compatible constructor for previous (deprecated) logging callback signature
252
    EventLoop(const char* exe_name, std::function<void(bool, std::string)> old_callback, void* context = nullptr)
253
1
        : EventLoop(exe_name,
254
67
                LogFn{[old_callback = std::move(old_callback)](LogMessage log_data) {old_callback(log_data.level == Log::Raise, std::move(log_data.message));}},
255
1
                context){}
256
257
    ~EventLoop();
258
259
    //! Run event loop. Does not return until shutdown. This should only be
260
    //! called once from the m_thread_id thread. This will block until
261
    //! the m_num_refs reference count is 0.
262
    void loop();
263
264
    //! Run function on event loop thread. Does not return until function completes.
265
    //! Must be called while the loop() function is active.
266
    void post(kj::Function<void()> fn);
267
268
    //! Wrapper around EventLoop::post that takes advantage of the
269
    //! fact that callable will not go out of scope to avoid requirement that it
270
    //! be copyable.
271
    template <typename Callable>
272
    void sync(Callable&& callable)
273
254
    {
274
254
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
10
    {
274
10
        post(std::forward<Callable>(callable));
275
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
273
10
    {
274
10
        post(std::forward<Callable>(callable));
275
10
    }
void mp::EventLoop::sync<void mp::ListenConnections<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&, std::optional<unsigned long>)::'lambda'()>(void mp::ListenConnections<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&, std::optional<unsigned long>)::'lambda'()&&)
Line
Count
Source
273
3
    {
274
3
        post(std::forward<Callable>(callable));
275
3
    }
protocol.cpp:void mp::EventLoop::sync<ipc::capnp::(anonymous namespace)::CapnpProtocol::disconnectIncoming()::'lambda'()>(ipc::capnp::(anonymous namespace)::CapnpProtocol::disconnectIncoming()::'lambda'()&&)
Line
Count
Source
273
1
    {
274
1
        post(std::forward<Callable>(callable));
275
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
273
10
    {
274
10
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results> (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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results> (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<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::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::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::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::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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>&&)
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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>&&)
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
4
    {
274
4
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
6
    {
274
6
        post(std::forward<Callable>(callable));
275
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
273
46
    {
274
46
        post(std::forward<Callable>(callable));
275
46
    }
proxy.cpp:void mp::EventLoop::sync<mp::ProxyClient<mp::Thread>::~ProxyClient()::$_0>(mp::ProxyClient<mp::Thread>::~ProxyClient()::$_0&&)
Line
Count
Source
273
26
    {
274
26
        post(std::forward<Callable>(callable));
275
26
    }
276
277
    //! Register cleanup function to run on asynchronous worker thread without
278
    //! blocking the event loop thread.
279
    void addAsyncCleanup(std::function<void()> fn);
280
281
    //! Start asynchronous worker thread if necessary. This is only done if
282
    //! there are ProxyServerBase::m_impl objects that need to be destroyed
283
    //! asynchronously, without tying up the event loop thread. This can happen
284
    //! when an interface does not declare a destroy() method that would allow
285
    //! the client to wait for the destructor to finish and run it on a
286
    //! dedicated thread. It can also happen whenever this is a broken
287
    //! connection and the client is no longer around to call the destructors
288
    //! and the server objects need to be garbage collected. In both cases, it
289
    //! is important that ProxyServer::m_impl destructors do not run on the
290
    //! eventloop thread because they may need it to do I/O if they perform
291
    //! other IPC calls.
292
    void startAsyncThread() MP_REQUIRES(m_mutex);
293
294
    //! Check if loop should exit.
295
    bool done() const MP_REQUIRES(m_mutex);
296
297
    //! Process name included in thread names so combined debug output from
298
    //! multiple processes is easier to understand.
299
    const char* m_exe_name;
300
301
    //! ID of the event loop thread
302
    std::thread::id m_thread_id = std::this_thread::get_id();
303
304
    //! Handle of an async worker thread. Joined on destruction. Unset if async
305
    //! method has not been called.
306
    std::thread m_async_thread;
307
308
    //! Callback function to run on event loop thread during post() or sync() call.
309
    kj::Function<void()>* m_post_fn MP_GUARDED_BY(m_mutex) = nullptr;
310
311
    //! Callback functions to run on async thread.
312
    std::optional<CleanupList> m_async_fns MP_GUARDED_BY(m_mutex);
313
314
    //! Pipe read handle used to wake up the event loop thread.
315
    int m_wait_fd = -1;
316
317
    //! Pipe write handle used to wake up the event loop thread.
318
    int m_post_fd = -1;
319
320
    //! Number of EventLoopRef instances referencing this event loop. This is a
321
    //! sum of the number of client and server objects (Connection, ProxyClient,
322
    //! ProxyServer) using the loop, plus temporary references held while
323
    //! posting functions to the loop, plus any references held by external code
324
    //! to keep the loop running. The loop() method exits when this count drops
325
    //! to 0 (and m_async_fns is empty).
326
    int m_num_refs MP_GUARDED_BY(m_mutex) = 0;
327
328
    //! Mutex and condition variable used to post tasks to event loop and async
329
    //! thread.
330
    Mutex m_mutex;
331
    std::condition_variable m_cv;
332
333
    //! Capnp IO context.
334
    kj::AsyncIoContext m_io_context;
335
336
    //! Capnp error handler. Needs to outlive m_task_set.
337
    LoggingErrorHandler m_error_handler{*this};
338
339
    //! Capnp list of pending promises.
340
    std::unique_ptr<kj::TaskSet> m_task_set;
341
342
    //! List of connections.
343
    std::list<Connection> m_incoming_connections;
344
345
    //! Logging options
346
    LogOptions m_log_opts;
347
348
    //! External context pointer.
349
    void* m_context;
350
351
    //! Hook called when ProxyServer<ThreadMap>::makeThread() is called.
352
    std::function<void()> testing_hook_makethread;
353
354
    //! Hook called on the worker thread inside makeThread(), after the thread
355
    //! context is set up and thread_context promise is fulfilled, but before it
356
    //! starts waiting for requests.
357
    std::function<void()> testing_hook_makethread_created;
358
359
    //! Hook called on the worker thread when it starts to execute an async
360
    //! request. Used by tests to control timing or inject behavior at this
361
    //! point in execution.
362
    std::function<void()> testing_hook_async_request_start;
363
364
    //! Hook called on the worker thread just before returning results.
365
    std::function<void()> testing_hook_async_request_done;
366
367
    //! Hook called on the event loop thread when a client has connected.
368
    std::function<void()> testing_hook_connected;
369
370
    //! Hook called on the event loop thread when a client has disconnected.
371
    std::function<void()> testing_hook_disconnected;
372
};
373
374
//! Single element task queue used to handle recursive capnp calls. (If the
375
//! server makes a callback into the client in the middle of a request, while the client
376
//! thread is blocked waiting for server response, this is what allows the
377
//! client to run the request in the same thread, the same way code would run in a
378
//! single process, with the callback sharing the same thread stack as the original
379
//! call.) To support this, the clientInvoke function calls Waiter::wait() to
380
//! block the client IPC thread while initial request is in progress. Then if
381
//! there is a callback, it is executed with Waiter::post().
382
//!
383
//! The Waiter class is also used server-side by `ProxyServer<Thread>::post()`
384
//! to execute IPC calls on worker threads.
385
struct Waiter
386
{
387
15
    Waiter() = default;
388
389
    template <typename Fn>
390
    bool post(Fn&& fn)
391
26
    {
392
26
        const Lock lock(m_mutex);
393
26
        if (m_fn) return false;
394
26
        m_fn = std::forward<Fn>(fn);
395
26
        m_cv.notify_all();
396
26
        return true;
397
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
391
6
    {
392
6
        const Lock lock(m_mutex);
393
6
        if (m_fn) return false;
394
6
        m_fn = std::forward<Fn>(fn);
395
6
        m_cv.notify_all();
396
6
        return true;
397
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
391
4
    {
392
4
        const Lock lock(m_mutex);
393
4
        if (m_fn) return false;
394
4
        m_fn = std::forward<Fn>(fn);
395
4
        m_cv.notify_all();
396
4
        return true;
397
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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>&&)
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'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
391
4
    {
392
4
        const Lock lock(m_mutex);
393
4
        if (m_fn) return false;
394
4
        m_fn = std::forward<Fn>(fn);
395
4
        m_cv.notify_all();
396
4
        return true;
397
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
391
6
    {
392
6
        const Lock lock(m_mutex);
393
6
        if (m_fn) return false;
394
6
        m_fn = std::forward<Fn>(fn);
395
6
        m_cv.notify_all();
396
6
        return true;
397
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
391
6
    {
392
6
        const Lock lock(m_mutex);
393
6
        if (m_fn) return false;
394
6
        m_fn = std::forward<Fn>(fn);
395
6
        m_cv.notify_all();
396
6
        return true;
397
6
    }
398
399
    template <class Predicate>
400
    void wait(Lock& lock, Predicate pred) MP_REQUIRES(m_mutex)
401
53
    {
402
107
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
133
            while (m_fn) {
409
26
                auto fn = std::move(*m_fn);
410
26
                m_fn.reset();
411
26
                Unlock(lock, fn);
412
26
            }
413
107
            const bool done = pred();
414
107
            return done;
415
107
        });
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
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
1
            const bool done = pred();
414
1
            return done;
415
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>)::'lambda'()::operator()() const
Line
Count
Source
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
1
            const bool done = pred();
414
1
            return done;
415
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>)::'lambda'()::operator()() const
Line
Count
Source
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
1
            const bool done = pred();
414
1
            return done;
415
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>)::'lambda'()::operator()() const
Line
Count
Source
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
1
            const bool done = pred();
414
1
            return done;
415
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>)::'lambda'()::operator()() const
Line
Count
Source
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
1
            const bool done = pred();
414
1
            return done;
415
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>)::'lambda'()::operator()() const
Line
Count
Source
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
1
            const bool done = pred();
414
1
            return done;
415
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>)::'lambda'()::operator()() const
Line
Count
Source
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
1
            const bool done = pred();
414
1
            return done;
415
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>)::'lambda'()::operator()() const
Line
Count
Source
402
17
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
17
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
17
            const bool done = pred();
414
17
            return done;
415
17
        });
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
402
12
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
12
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
12
            const bool done = pred();
414
12
            return done;
415
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
402
8
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
8
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
8
            const bool done = pred();
414
8
            return done;
415
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
402
12
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
12
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
12
            const bool done = pred();
414
12
            return done;
415
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
402
12
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
12
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
12
            const bool done = pred();
414
12
            return done;
415
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results> (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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results> (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
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::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::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::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::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
402
8
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
8
            while (m_fn) {
409
0
                auto fn = std::move(*m_fn);
410
0
                m_fn.reset();
411
0
                Unlock(lock, fn);
412
0
            }
413
8
            const bool done = pred();
414
8
            return done;
415
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
402
31
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
57
            while (m_fn) {
409
26
                auto fn = std::move(*m_fn);
410
26
                m_fn.reset();
411
26
                Unlock(lock, fn);
412
26
            }
413
31
            const bool done = pred();
414
31
            return done;
415
31
        });
416
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
401
1
    {
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
1
                auto fn = std::move(*m_fn);
410
1
                m_fn.reset();
411
1
                Unlock(lock, fn);
412
1
            }
413
1
            const bool done = pred();
414
1
            return done;
415
1
        });
416
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
401
1
    {
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
1
                auto fn = std::move(*m_fn);
410
1
                m_fn.reset();
411
1
                Unlock(lock, fn);
412
1
            }
413
1
            const bool done = pred();
414
1
            return done;
415
1
        });
416
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
401
1
    {
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
1
                auto fn = std::move(*m_fn);
410
1
                m_fn.reset();
411
1
                Unlock(lock, fn);
412
1
            }
413
1
            const bool done = pred();
414
1
            return done;
415
1
        });
416
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
401
1
    {
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
1
                auto fn = std::move(*m_fn);
410
1
                m_fn.reset();
411
1
                Unlock(lock, fn);
412
1
            }
413
1
            const bool done = pred();
414
1
            return done;
415
1
        });
416
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
401
1
    {
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
1
                auto fn = std::move(*m_fn);
410
1
                m_fn.reset();
411
1
                Unlock(lock, fn);
412
1
            }
413
1
            const bool done = pred();
414
1
            return done;
415
1
        });
416
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
401
1
    {
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
1
                auto fn = std::move(*m_fn);
410
1
                m_fn.reset();
411
1
                Unlock(lock, fn);
412
1
            }
413
1
            const bool done = pred();
414
1
            return done;
415
1
        });
416
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
401
1
    {
402
1
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
1
            while (m_fn) {
409
1
                auto fn = std::move(*m_fn);
410
1
                m_fn.reset();
411
1
                Unlock(lock, fn);
412
1
            }
413
1
            const bool done = pred();
414
1
            return done;
415
1
        });
416
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
401
10
    {
402
10
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
10
            while (m_fn) {
409
10
                auto fn = std::move(*m_fn);
410
10
                m_fn.reset();
411
10
                Unlock(lock, fn);
412
10
            }
413
10
            const bool done = pred();
414
10
            return done;
415
10
        });
416
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
401
6
    {
402
6
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
6
            while (m_fn) {
409
6
                auto fn = std::move(*m_fn);
410
6
                m_fn.reset();
411
6
                Unlock(lock, fn);
412
6
            }
413
6
            const bool done = pred();
414
6
            return done;
415
6
        });
416
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
401
4
    {
402
4
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
4
            while (m_fn) {
409
4
                auto fn = std::move(*m_fn);
410
4
                m_fn.reset();
411
4
                Unlock(lock, fn);
412
4
            }
413
4
            const bool done = pred();
414
4
            return done;
415
4
        });
416
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
401
6
    {
402
6
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
6
            while (m_fn) {
409
6
                auto fn = std::move(*m_fn);
410
6
                m_fn.reset();
411
6
                Unlock(lock, fn);
412
6
            }
413
6
            const bool done = pred();
414
6
            return done;
415
6
        });
416
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
401
6
    {
402
6
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
6
            while (m_fn) {
409
6
                auto fn = std::move(*m_fn);
410
6
                m_fn.reset();
411
6
                Unlock(lock, fn);
412
6
            }
413
6
            const bool done = pred();
414
6
            return done;
415
6
        });
416
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results> (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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results> (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>)
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::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::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::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::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
401
4
    {
402
4
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
4
            while (m_fn) {
409
4
                auto fn = std::move(*m_fn);
410
4
                m_fn.reset();
411
4
                Unlock(lock, fn);
412
4
            }
413
4
            const bool done = pred();
414
4
            return done;
415
4
        });
416
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
401
10
    {
402
10
        m_cv.wait(lock.m_lock, [&]() MP_REQUIRES(m_mutex) {
403
            // Important for this to be "while (m_fn)", not "if (m_fn)" to avoid
404
            // a lost-wakeup bug. A new m_fn and m_cv notification might be sent
405
            // after the fn() call and before the lock.lock() call in this loop
406
            // in the case where a capnp response is sent and a brand new
407
            // request is immediately received.
408
10
            while (m_fn) {
409
10
                auto fn = std::move(*m_fn);
410
10
                m_fn.reset();
411
10
                Unlock(lock, fn);
412
10
            }
413
10
            const bool done = pred();
414
10
            return done;
415
10
        });
416
10
    }
417
418
    //! Mutex mainly used internally by waiter class, but also used externally
419
    //! to guard access to related state. Specifically, since the thread_local
420
    //! ThreadContext struct owns a Waiter, the Waiter::m_mutex is used to guard
421
    //! access to other parts of the struct to avoid needing to deal with more
422
    //! mutexes than necessary. This mutex can be held at the same time as
423
    //! EventLoop::m_mutex as long as Waiter::mutex is locked first and
424
    //! EventLoop::m_mutex is locked second.
425
    Mutex m_mutex;
426
    std::condition_variable m_cv MP_GUARDED_BY(m_mutex);
427
    std::optional<kj::Function<void()>> m_fn MP_GUARDED_BY(m_mutex);
428
};
429
430
//! Object holding network & rpc state associated with either an incoming server
431
//! connection, or an outgoing client connection. It must be created and destroyed
432
//! on the event loop thread.
433
//! In addition to Cap'n Proto state, it also holds lists of callbacks to run
434
//! when the connection is closed.
435
class Connection
436
{
437
public:
438
    Connection(EventLoop& loop, kj::Own<kj::AsyncIoStream>&& stream_)
439
11
        : m_loop(loop), m_stream(kj::mv(stream_)),
440
11
          m_network(*m_stream, ::capnp::rpc::twoparty::Side::CLIENT, ::capnp::ReaderOptions()),
441
11
          m_rpc_system(::capnp::makeRpcClient(m_network)) {}
442
    Connection(EventLoop& loop,
443
        kj::Own<kj::AsyncIoStream>&& stream_,
444
        const std::function<::capnp::Capability::Client(Connection&)>& make_client)
445
11
        : m_loop(loop), m_stream(kj::mv(stream_)),
446
11
          m_network(*m_stream, ::capnp::rpc::twoparty::Side::SERVER, ::capnp::ReaderOptions()),
447
11
          m_rpc_system(::capnp::makeRpcServer(m_network, make_client(*this))) {}
448
449
    //! Run cleanup functions. Must be called from the event loop thread. First
450
    //! calls synchronous cleanup functions while blocked (to free capnp
451
    //! Capability::Client handles owned by ProxyClient objects), then schedules
452
    //! asynchronous cleanup functions to run in a worker thread (to run
453
    //! destructors of m_impl instances owned by ProxyServer objects).
454
    ~Connection();
455
456
    //! Register synchronous cleanup function to run on event loop thread (with
457
    //! access to capnp thread local variables) when disconnect() is called.
458
    //! any new i/o.
459
    CleanupIt addSyncCleanup(std::function<void()> fn);
460
    void removeSyncCleanup(CleanupIt it);
461
462
    //! Add disconnect handler.
463
    template <typename F>
464
    void onDisconnect(F&& f)
465
21
    {
466
        // Add disconnect handler to local TaskSet to ensure it is canceled and
467
        // will never run after connection object is destroyed. But when disconnect
468
        // handler fires, do not call the function f right away, instead add it
469
        // to the EventLoop TaskSet to avoid "Promise callback destroyed itself"
470
        // error in the typical case where f deletes this Connection object.
471
21
        m_on_disconnect.add(m_network.onDisconnect().then(
472
21
            [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));
ipc_tests.cpp:void mp::Connection::onDisconnect<IpcPipeTest()::$_0::operator()() const::'lambda'()>(IpcPipeTest()::$_0::operator()() const::'lambda'()&&)::'lambda'()::operator()()
Line
Count
Source
472
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, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)::'lambda'()>(void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)::'lambda'()&&)::'lambda'()::operator()()
Line
Count
Source
472
9
            [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));
void mp::Connection::onDisconnect<void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)::'lambda'()>(void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)::'lambda'()&&)::'lambda'()::operator()()
Line
Count
Source
472
1
            [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));
473
21
    }
ipc_tests.cpp:void mp::Connection::onDisconnect<IpcPipeTest()::$_0::operator()() const::'lambda'()>(IpcPipeTest()::$_0::operator()() const::'lambda'()&&)
Line
Count
Source
465
1
    {
466
        // Add disconnect handler to local TaskSet to ensure it is canceled and
467
        // will never run after connection object is destroyed. But when disconnect
468
        // handler fires, do not call the function f right away, instead add it
469
        // to the EventLoop TaskSet to avoid "Promise callback destroyed itself"
470
        // error in the typical case where f deletes this Connection object.
471
1
        m_on_disconnect.add(m_network.onDisconnect().then(
472
1
            [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));
473
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
465
10
    {
466
        // Add disconnect handler to local TaskSet to ensure it is canceled and
467
        // will never run after connection object is destroyed. But when disconnect
468
        // handler fires, do not call the function f right away, instead add it
469
        // to the EventLoop TaskSet to avoid "Promise callback destroyed itself"
470
        // error in the typical case where f deletes this Connection object.
471
10
        m_on_disconnect.add(m_network.onDisconnect().then(
472
10
            [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));
473
10
    }
void mp::Connection::onDisconnect<void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)::'lambda'()>(void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)::'lambda'()&&)
Line
Count
Source
465
9
    {
466
        // Add disconnect handler to local TaskSet to ensure it is canceled and
467
        // will never run after connection object is destroyed. But when disconnect
468
        // handler fires, do not call the function f right away, instead add it
469
        // to the EventLoop TaskSet to avoid "Promise callback destroyed itself"
470
        // error in the typical case where f deletes this Connection object.
471
9
        m_on_disconnect.add(m_network.onDisconnect().then(
472
9
            [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));
473
9
    }
void mp::Connection::onDisconnect<void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)::'lambda'()>(void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)::'lambda'()&&)
Line
Count
Source
465
1
    {
466
        // Add disconnect handler to local TaskSet to ensure it is canceled and
467
        // will never run after connection object is destroyed. But when disconnect
468
        // handler fires, do not call the function f right away, instead add it
469
        // to the EventLoop TaskSet to avoid "Promise callback destroyed itself"
470
        // error in the typical case where f deletes this Connection object.
471
1
        m_on_disconnect.add(m_network.onDisconnect().then(
472
1
            [f = std::forward<F>(f), this]() mutable { m_loop->m_task_set->add(kj::evalLater(kj::mv(f))); }));
473
1
    }
474
475
    EventLoopRef m_loop;
476
    kj::Own<kj::AsyncIoStream> m_stream;
477
    LoggingErrorHandler m_error_handler{*m_loop};
478
    //! TaskSet used to cancel the m_network.onDisconnect() handler for remote
479
    //! disconnections, if the connection is closed locally first by deleting
480
    //! this Connection object.
481
    kj::TaskSet m_on_disconnect{m_error_handler};
482
    ::capnp::TwoPartyVatNetwork m_network;
483
    std::optional<::capnp::RpcSystem<::capnp::rpc::twoparty::VatId>> m_rpc_system;
484
485
    // ThreadMap interface client, used to create a remote server thread when an
486
    // client IPC call is being made for the first time from a new thread.
487
    ThreadMap::Client m_thread_map{nullptr};
488
489
    //! Collection of server-side IPC worker threads (ProxyServer<Thread> objects previously returned by
490
    //! ThreadMap.makeThread) used to service requests to clients.
491
    ::capnp::CapabilityServerSet<Thread> m_threads;
492
493
    //! A thread created by makePool with associated pending work queue. Vector is filled once by makePool() and never resized.
494
    struct PoolSlot {
495
        Thread::Client client;
496
        size_t depth{0};
497
    };
498
    std::vector<PoolSlot> m_thread_pool;
499
500
    //! Canceler for canceling promises that we want to discard when the
501
    //! connection is destroyed. This is used to interrupt method calls that are
502
    //! still executing at time of disconnection.
503
    kj::Canceler m_canceler;
504
505
    //! Cleanup functions to run if connection is broken unexpectedly.  List
506
    //! will be empty if all ProxyClient are destroyed cleanly before the
507
    //! connection is destroyed.
508
    CleanupList m_sync_cleanup_fns;
509
};
510
511
//! Vat id for server side of connection. Required argument to RpcSystem::bootStrap()
512
//!
513
//! "Vat" is Cap'n Proto nomenclature for a host of various objects that facilitates
514
//! bidirectional communication with other vats; it is often but not always 1-1 with
515
//! processes. Cap'n Proto doesn't reference clients or servers per se; instead everything
516
//! is just a vat.
517
//!
518
//! See also: https://github.com/capnproto/capnproto/blob/9021f0c722b36cb11e3690b0860939255ebad39c/c%2B%2B/src/capnp/rpc.capnp#L42-L56
519
struct ServerVatId
520
{
521
    ::capnp::word scratch[4]{};
522
    ::capnp::MallocMessageBuilder message{scratch};
523
    ::capnp::rpc::twoparty::VatId::Builder vat_id{message.getRoot<::capnp::rpc::twoparty::VatId>()};
524
11
    ServerVatId() { vat_id.setSide(::capnp::rpc::twoparty::Side::SERVER); }
525
};
526
527
template <typename Interface, typename Impl>
528
ProxyClientBase<Interface, Impl>::ProxyClientBase(typename Interface::Client client,
529
    Connection* connection,
530
    bool destroy_connection)
531
67
    : m_client(std::move(client)), m_context(connection)
532
533
67
{
534
67
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
535
    // Handler for the connection getting destroyed before this client object.
536
67
    auto disconnect_cb = m_context.connection->addSyncCleanup([this]() {
537
        // Release client capability by move-assigning to temporary.
538
0
        {
539
0
            typename Interface::Client(std::move(m_client));
540
0
        }
541
0
        Lock lock{m_context.loop->m_mutex};
542
0
        m_context.connection = nullptr;
543
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
544
545
    // Two shutdown sequences are supported:
546
    //
547
    // - A normal sequence where client proxy objects are deleted by external
548
    //   code that no longer needs them
549
    //
550
    // - A garbage collection sequence where the connection or event loop shuts
551
    //   down while external code is still holding client references.
552
    //
553
    // The first case is handled here when m_context.connection is not null. The
554
    // second case is handled by the disconnect_cb function, which sets
555
    // m_context.connection to null so nothing happens here.
556
67
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
67
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
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
565
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
565
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
565
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
565
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
565
46
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
0
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
0
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
67
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
67
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
67
            {
581
67
                typename Interface::Client(std::move(m_client));
582
67
            }
583
67
            if (destroy_connection) {
584
11
                delete m_context.connection;
585
11
                m_context.connection = nullptr;
586
11
            }
587
67
        });
mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda0'()::operator()() const::'lambda0'()::operator()() const
Line
Count
Source
570
1
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
1
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
1
            {
581
1
                typename Interface::Client(std::move(m_client));
582
1
            }
583
1
            if (destroy_connection) {
584
1
                delete m_context.connection;
585
1
                m_context.connection = nullptr;
586
1
            }
587
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
570
10
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
10
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
10
            {
581
10
                typename Interface::Client(std::move(m_client));
582
10
            }
583
10
            if (destroy_connection) {
584
10
                delete m_context.connection;
585
10
                m_context.connection = nullptr;
586
10
            }
587
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
570
6
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
6
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
6
            {
581
6
                typename Interface::Client(std::move(m_client));
582
6
            }
583
6
            if (destroy_connection) {
584
0
                delete m_context.connection;
585
0
                m_context.connection = nullptr;
586
0
            }
587
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
570
4
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
4
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
4
            {
581
4
                typename Interface::Client(std::move(m_client));
582
4
            }
583
4
            if (destroy_connection) {
584
0
                delete m_context.connection;
585
0
                m_context.connection = nullptr;
586
0
            }
587
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
570
46
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
46
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
46
            {
581
46
                typename Interface::Client(std::move(m_client));
582
46
            }
583
46
            if (destroy_connection) {
584
0
                delete m_context.connection;
585
0
                m_context.connection = nullptr;
586
0
            }
587
46
        });
588
67
    }
589
67
    });
mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)::'lambda0'()::operator()() const
Line
Count
Source
556
1
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
1
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
1
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
0
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
0
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
1
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
1
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
1
            {
581
1
                typename Interface::Client(std::move(m_client));
582
1
            }
583
1
            if (destroy_connection) {
584
1
                delete m_context.connection;
585
1
                m_context.connection = nullptr;
586
1
            }
587
1
        });
588
1
    }
589
1
    });
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)::'lambda0'()::operator()() const
Line
Count
Source
556
10
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
10
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
10
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
0
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
0
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
10
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
10
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
10
            {
581
10
                typename Interface::Client(std::move(m_client));
582
10
            }
583
10
            if (destroy_connection) {
584
10
                delete m_context.connection;
585
10
                m_context.connection = nullptr;
586
10
            }
587
10
        });
588
10
    }
589
10
    });
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)::'lambda0'()::operator()() const
Line
Count
Source
556
6
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
6
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
6
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
0
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
0
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
6
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
6
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
6
            {
581
6
                typename Interface::Client(std::move(m_client));
582
6
            }
583
6
            if (destroy_connection) {
584
6
                delete m_context.connection;
585
6
                m_context.connection = nullptr;
586
6
            }
587
6
        });
588
6
    }
589
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
556
4
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
4
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
4
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
0
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
0
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
4
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
4
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
4
            {
581
4
                typename Interface::Client(std::move(m_client));
582
4
            }
583
4
            if (destroy_connection) {
584
4
                delete m_context.connection;
585
4
                m_context.connection = nullptr;
586
4
            }
587
4
        });
588
4
    }
589
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
556
46
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
46
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
46
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
0
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
0
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
46
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
46
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
46
            {
581
46
                typename Interface::Client(std::move(m_client));
582
46
            }
583
46
            if (destroy_connection) {
584
46
                delete m_context.connection;
585
46
                m_context.connection = nullptr;
586
46
            }
587
46
        });
588
46
    }
589
46
    });
590
67
    Sub::construct(*this);
591
67
}
mp::ProxyClientBase<gen::FooInterface, FooImplementation>::ProxyClientBase(gen::FooInterface::Client, mp::Connection*, bool)
Line
Count
Source
531
1
    : m_client(std::move(client)), m_context(connection)
532
533
1
{
534
1
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
535
    // Handler for the connection getting destroyed before this client object.
536
1
    auto disconnect_cb = m_context.connection->addSyncCleanup([this]() {
537
        // Release client capability by move-assigning to temporary.
538
1
        {
539
1
            typename Interface::Client(std::move(m_client));
540
1
        }
541
1
        Lock lock{m_context.loop->m_mutex};
542
1
        m_context.connection = nullptr;
543
1
    });
544
545
    // Two shutdown sequences are supported:
546
    //
547
    // - A normal sequence where client proxy objects are deleted by external
548
    //   code that no longer needs them
549
    //
550
    // - A garbage collection sequence where the connection or event loop shuts
551
    //   down while external code is still holding client references.
552
    //
553
    // The first case is handled here when m_context.connection is not null. The
554
    // second case is handled by the disconnect_cb function, which sets
555
    // m_context.connection to null so nothing happens here.
556
1
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
1
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
1
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
1
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
1
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
1
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
1
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
1
            {
581
1
                typename Interface::Client(std::move(m_client));
582
1
            }
583
1
            if (destroy_connection) {
584
1
                delete m_context.connection;
585
1
                m_context.connection = nullptr;
586
1
            }
587
1
        });
588
1
    }
589
1
    });
590
1
    Sub::construct(*this);
591
1
}
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyClientBase(ipc::capnp::messages::Init::Client, mp::Connection*, bool)
Line
Count
Source
531
10
    : m_client(std::move(client)), m_context(connection)
532
533
10
{
534
10
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
535
    // Handler for the connection getting destroyed before this client object.
536
10
    auto disconnect_cb = m_context.connection->addSyncCleanup([this]() {
537
        // Release client capability by move-assigning to temporary.
538
10
        {
539
10
            typename Interface::Client(std::move(m_client));
540
10
        }
541
10
        Lock lock{m_context.loop->m_mutex};
542
10
        m_context.connection = nullptr;
543
10
    });
544
545
    // Two shutdown sequences are supported:
546
    //
547
    // - A normal sequence where client proxy objects are deleted by external
548
    //   code that no longer needs them
549
    //
550
    // - A garbage collection sequence where the connection or event loop shuts
551
    //   down while external code is still holding client references.
552
    //
553
    // The first case is handled here when m_context.connection is not null. The
554
    // second case is handled by the disconnect_cb function, which sets
555
    // m_context.connection to null so nothing happens here.
556
10
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
10
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
10
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
10
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
10
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
10
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
10
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
10
            {
581
10
                typename Interface::Client(std::move(m_client));
582
10
            }
583
10
            if (destroy_connection) {
584
10
                delete m_context.connection;
585
10
                m_context.connection = nullptr;
586
10
            }
587
10
        });
588
10
    }
589
10
    });
590
10
    Sub::construct(*this);
591
10
}
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyClientBase(ipc::capnp::messages::Echo::Client, mp::Connection*, bool)
Line
Count
Source
531
6
    : m_client(std::move(client)), m_context(connection)
532
533
6
{
534
6
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
535
    // Handler for the connection getting destroyed before this client object.
536
6
    auto disconnect_cb = m_context.connection->addSyncCleanup([this]() {
537
        // Release client capability by move-assigning to temporary.
538
6
        {
539
6
            typename Interface::Client(std::move(m_client));
540
6
        }
541
6
        Lock lock{m_context.loop->m_mutex};
542
6
        m_context.connection = nullptr;
543
6
    });
544
545
    // Two shutdown sequences are supported:
546
    //
547
    // - A normal sequence where client proxy objects are deleted by external
548
    //   code that no longer needs them
549
    //
550
    // - A garbage collection sequence where the connection or event loop shuts
551
    //   down while external code is still holding client references.
552
    //
553
    // The first case is handled here when m_context.connection is not null. The
554
    // second case is handled by the disconnect_cb function, which sets
555
    // m_context.connection to null so nothing happens here.
556
6
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
6
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
6
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
6
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
6
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
6
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
6
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
6
            {
581
6
                typename Interface::Client(std::move(m_client));
582
6
            }
583
6
            if (destroy_connection) {
584
6
                delete m_context.connection;
585
6
                m_context.connection = nullptr;
586
6
            }
587
6
        });
588
6
    }
589
6
    });
590
6
    Sub::construct(*this);
591
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
531
4
    : m_client(std::move(client)), m_context(connection)
532
533
4
{
534
4
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
535
    // Handler for the connection getting destroyed before this client object.
536
4
    auto disconnect_cb = m_context.connection->addSyncCleanup([this]() {
537
        // Release client capability by move-assigning to temporary.
538
4
        {
539
4
            typename Interface::Client(std::move(m_client));
540
4
        }
541
4
        Lock lock{m_context.loop->m_mutex};
542
4
        m_context.connection = nullptr;
543
4
    });
544
545
    // Two shutdown sequences are supported:
546
    //
547
    // - A normal sequence where client proxy objects are deleted by external
548
    //   code that no longer needs them
549
    //
550
    // - A garbage collection sequence where the connection or event loop shuts
551
    //   down while external code is still holding client references.
552
    //
553
    // The first case is handled here when m_context.connection is not null. The
554
    // second case is handled by the disconnect_cb function, which sets
555
    // m_context.connection to null so nothing happens here.
556
4
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
4
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
4
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
4
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
4
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
4
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
4
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
4
            {
581
4
                typename Interface::Client(std::move(m_client));
582
4
            }
583
4
            if (destroy_connection) {
584
4
                delete m_context.connection;
585
4
                m_context.connection = nullptr;
586
4
            }
587
4
        });
588
4
    }
589
4
    });
590
4
    Sub::construct(*this);
591
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
531
46
    : m_client(std::move(client)), m_context(connection)
532
533
46
{
534
46
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
535
    // Handler for the connection getting destroyed before this client object.
536
46
    auto disconnect_cb = m_context.connection->addSyncCleanup([this]() {
537
        // Release client capability by move-assigning to temporary.
538
46
        {
539
46
            typename Interface::Client(std::move(m_client));
540
46
        }
541
46
        Lock lock{m_context.loop->m_mutex};
542
46
        m_context.connection = nullptr;
543
46
    });
544
545
    // Two shutdown sequences are supported:
546
    //
547
    // - A normal sequence where client proxy objects are deleted by external
548
    //   code that no longer needs them
549
    //
550
    // - A garbage collection sequence where the connection or event loop shuts
551
    //   down while external code is still holding client references.
552
    //
553
    // The first case is handled here when m_context.connection is not null. The
554
    // second case is handled by the disconnect_cb function, which sets
555
    // m_context.connection to null so nothing happens here.
556
46
    m_context.cleanup_fns.emplace_front([this, destroy_connection, disconnect_cb]{
557
46
    {
558
        // If the capnp interface defines a destroy method, call it to destroy
559
        // the remote object, waiting for it to be deleted server side. If the
560
        // capnp interface does not define a destroy method, this will just call
561
        // an empty stub defined in the ProxyClientBase class and do nothing.
562
        // Exceptions are caught and logged rather than propagated because
563
        // ~ProxyClientBase is noexcept and the peer may be gone by the time
564
        // this runs.
565
46
        if (kj::runCatchingExceptions([&]{ Sub::destroy(*this); }) != nullptr) {
566
46
            MP_LOG(*m_context.loop, Log::Warning) << "Remote destroy call failed during cleanup. Continuing.";
567
46
        }
568
569
        // FIXME: Could just invoke removed addCleanup fn here instead of duplicating code
570
46
        m_context.loop->sync([&]() {
571
            // Remove disconnect callback on cleanup so it doesn't run and try
572
            // to access this object after it's destroyed. This call needs to
573
            // run inside loop->sync() on the event loop thread because
574
            // otherwise, if there were an ill-timed disconnect, the
575
            // onDisconnect handler could fire and delete the Connection object
576
            // before the removeSyncCleanup call.
577
46
            if (m_context.connection) m_context.connection->removeSyncCleanup(disconnect_cb);
578
579
            // Release client capability by move-assigning to temporary.
580
46
            {
581
46
                typename Interface::Client(std::move(m_client));
582
46
            }
583
46
            if (destroy_connection) {
584
46
                delete m_context.connection;
585
46
                m_context.connection = nullptr;
586
46
            }
587
46
        });
588
46
    }
589
46
    });
590
46
    Sub::construct(*this);
591
46
}
592
593
template <typename Interface, typename Impl>
594
ProxyClientBase<Interface, Impl>::~ProxyClientBase() noexcept
595
67
{
596
67
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
597
67
    CleanupRun(m_context.cleanup_fns);
598
67
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
599
67
}
mp::ProxyClientBase<gen::FooInterface, FooImplementation>::~ProxyClientBase()
Line
Count
Source
595
1
{
596
1
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
597
1
    CleanupRun(m_context.cleanup_fns);
598
1
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
599
1
}
mp::ProxyClientBase<ipc::capnp::messages::Init, interfaces::Init>::~ProxyClientBase()
Line
Count
Source
595
10
{
596
10
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
597
10
    CleanupRun(m_context.cleanup_fns);
598
10
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
599
10
}
mp::ProxyClientBase<ipc::capnp::messages::Echo, interfaces::Echo>::~ProxyClientBase()
Line
Count
Source
595
6
{
596
6
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
597
6
    CleanupRun(m_context.cleanup_fns);
598
6
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
599
6
}
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::Mining, interfaces::Mining>::~ProxyClientBase()
mp::ProxyClientBase<ipc::capnp::messages::Rpc, interfaces::Rpc>::~ProxyClientBase()
Line
Count
Source
595
4
{
596
4
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
597
4
    CleanupRun(m_context.cleanup_fns);
598
4
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
599
4
}
Unexecuted instantiation: mp::ProxyClientBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::~ProxyClientBase()
mp::ProxyClientBase<mp::Thread, capnp::Void>::~ProxyClientBase()
Line
Count
Source
595
46
{
596
46
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
597
46
    CleanupRun(m_context.cleanup_fns);
598
46
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
599
46
}
600
601
template <typename Interface, typename Impl>
602
ProxyServerBase<Interface, Impl>::ProxyServerBase(std::shared_ptr<Impl> impl, Connection& connection)
603
21
    : m_impl(std::move(impl)), m_context(&connection)
604
21
{
605
21
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
606
21
    assert(m_impl);
607
21
}
mp::ProxyServerBase<gen::FooInterface, FooImplementation>::ProxyServerBase(std::shared_ptr<FooImplementation>, mp::Connection&)
Line
Count
Source
603
1
    : m_impl(std::move(impl)), m_context(&connection)
604
1
{
605
1
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
606
    assert(m_impl);
607
1
}
mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>::ProxyServerBase(std::shared_ptr<interfaces::Init>, mp::Connection&)
Line
Count
Source
603
10
    : m_impl(std::move(impl)), m_context(&connection)
604
10
{
605
10
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
606
    assert(m_impl);
607
10
}
mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::ProxyServerBase(std::shared_ptr<interfaces::Echo>, mp::Connection&)
Line
Count
Source
603
6
    : m_impl(std::move(impl)), m_context(&connection)
604
6
{
605
6
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
606
    assert(m_impl);
607
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
603
4
    : m_impl(std::move(impl)), m_context(&connection)
604
4
{
605
4
    MP_LOG(*m_context.loop, Log::Debug) << "Creating " << CxxTypeName(*this) << " " << this;
606
    assert(m_impl);
607
4
}
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::ProxyServerBase(std::shared_ptr<interfaces::BlockTemplate>, mp::Connection&)
608
609
//! ProxyServer destructor, called from the EventLoop thread by Cap'n Proto
610
//! garbage collection code after there are no more references to this object.
611
//! This will typically happen when the corresponding ProxyClient object on the
612
//! other side of the connection is destroyed. It can also happen earlier if the
613
//! connection is broken or destroyed. In the latter case this destructor will
614
//! typically be called inside m_rpc_system.reset() call in the ~Connection
615
//! destructor while the Connection object still exists. However, because
616
//! ProxyServer objects are refcounted, and the Connection object could be
617
//! destroyed while asynchronous IPC calls are still in-flight, it's possible
618
//! for this destructor to be called after the Connection object no longer
619
//! exists, so it is NOT valid to dereference the m_context.connection pointer
620
//! from this function.
621
template <typename Interface, typename Impl>
622
ProxyServerBase<Interface, Impl>::~ProxyServerBase()
623
21
{
624
21
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
625
21
    if (m_impl) {
626
        // If impl is non-null at this point, it means no client is waiting for
627
        // the m_impl server object to be destroyed synchronously. This can
628
        // happen either if the interface did not define a "destroy" method (see
629
        // invokeDestroy method below), or if a destroy method was defined, but
630
        // the connection was broken before it could be called.
631
        //
632
        // In either case, be conservative and run the cleanup on an
633
        // asynchronous thread, to avoid destructors or cleanup functions
634
        // blocking or deadlocking the current EventLoop thread, since they
635
        // could be making IPC calls.
636
        //
637
        // Technically this is a little too conservative since if the interface
638
        // defines a "destroy" method, but the destroy method does not accept a
639
        // Context parameter specifying a worker thread, the cleanup method
640
        // would run on the EventLoop thread normally (when connection is
641
        // unbroken), but will not run on the EventLoop thread now (when
642
        // connection is broken). Probably some refactoring of the destructor
643
        // and invokeDestroy function is possible to make this cleaner and more
644
        // consistent.
645
15
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
15
            impl.reset();
647
15
            CleanupRun(fns);
648
15
        });
mp::ProxyServerBase<gen::FooInterface, FooImplementation>::~ProxyServerBase()::'lambda'()::operator()()
Line
Count
Source
645
1
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
1
            impl.reset();
647
1
            CleanupRun(fns);
648
1
        });
mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>::~ProxyServerBase()::'lambda'()::operator()()
Line
Count
Source
645
10
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
10
            impl.reset();
647
10
            CleanupRun(fns);
648
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
645
4
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
4
            impl.reset();
647
4
            CleanupRun(fns);
648
4
        });
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::~ProxyServerBase()::'lambda'()::operator()()
649
15
    }
650
21
    assert(m_context.cleanup_fns.empty());
651
21
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
652
21
}
mp::ProxyServerBase<gen::FooInterface, FooImplementation>::~ProxyServerBase()
Line
Count
Source
623
1
{
624
1
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
625
1
    if (m_impl) {
626
        // If impl is non-null at this point, it means no client is waiting for
627
        // the m_impl server object to be destroyed synchronously. This can
628
        // happen either if the interface did not define a "destroy" method (see
629
        // invokeDestroy method below), or if a destroy method was defined, but
630
        // the connection was broken before it could be called.
631
        //
632
        // In either case, be conservative and run the cleanup on an
633
        // asynchronous thread, to avoid destructors or cleanup functions
634
        // blocking or deadlocking the current EventLoop thread, since they
635
        // could be making IPC calls.
636
        //
637
        // Technically this is a little too conservative since if the interface
638
        // defines a "destroy" method, but the destroy method does not accept a
639
        // Context parameter specifying a worker thread, the cleanup method
640
        // would run on the EventLoop thread normally (when connection is
641
        // unbroken), but will not run on the EventLoop thread now (when
642
        // connection is broken). Probably some refactoring of the destructor
643
        // and invokeDestroy function is possible to make this cleaner and more
644
        // consistent.
645
1
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
1
            impl.reset();
647
1
            CleanupRun(fns);
648
1
        });
649
1
    }
650
1
    assert(m_context.cleanup_fns.empty());
651
1
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
652
1
}
mp::ProxyServerBase<ipc::capnp::messages::Init, interfaces::Init>::~ProxyServerBase()
Line
Count
Source
623
10
{
624
10
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
625
10
    if (m_impl) {
626
        // If impl is non-null at this point, it means no client is waiting for
627
        // the m_impl server object to be destroyed synchronously. This can
628
        // happen either if the interface did not define a "destroy" method (see
629
        // invokeDestroy method below), or if a destroy method was defined, but
630
        // the connection was broken before it could be called.
631
        //
632
        // In either case, be conservative and run the cleanup on an
633
        // asynchronous thread, to avoid destructors or cleanup functions
634
        // blocking or deadlocking the current EventLoop thread, since they
635
        // could be making IPC calls.
636
        //
637
        // Technically this is a little too conservative since if the interface
638
        // defines a "destroy" method, but the destroy method does not accept a
639
        // Context parameter specifying a worker thread, the cleanup method
640
        // would run on the EventLoop thread normally (when connection is
641
        // unbroken), but will not run on the EventLoop thread now (when
642
        // connection is broken). Probably some refactoring of the destructor
643
        // and invokeDestroy function is possible to make this cleaner and more
644
        // consistent.
645
10
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
10
            impl.reset();
647
10
            CleanupRun(fns);
648
10
        });
649
10
    }
650
10
    assert(m_context.cleanup_fns.empty());
651
10
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
652
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
623
4
{
624
4
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
625
4
    if (m_impl) {
626
        // If impl is non-null at this point, it means no client is waiting for
627
        // the m_impl server object to be destroyed synchronously. This can
628
        // happen either if the interface did not define a "destroy" method (see
629
        // invokeDestroy method below), or if a destroy method was defined, but
630
        // the connection was broken before it could be called.
631
        //
632
        // In either case, be conservative and run the cleanup on an
633
        // asynchronous thread, to avoid destructors or cleanup functions
634
        // blocking or deadlocking the current EventLoop thread, since they
635
        // could be making IPC calls.
636
        //
637
        // Technically this is a little too conservative since if the interface
638
        // defines a "destroy" method, but the destroy method does not accept a
639
        // Context parameter specifying a worker thread, the cleanup method
640
        // would run on the EventLoop thread normally (when connection is
641
        // unbroken), but will not run on the EventLoop thread now (when
642
        // connection is broken). Probably some refactoring of the destructor
643
        // and invokeDestroy function is possible to make this cleaner and more
644
        // consistent.
645
4
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
4
            impl.reset();
647
4
            CleanupRun(fns);
648
4
        });
649
4
    }
650
4
    assert(m_context.cleanup_fns.empty());
651
4
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
652
4
}
mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::~ProxyServerBase()
Line
Count
Source
623
6
{
624
6
    MP_LOG(*m_context.loop, Log::Debug) << "Cleaning up " << CxxTypeName(*this) << " " << this;
625
6
    if (m_impl) {
626
        // If impl is non-null at this point, it means no client is waiting for
627
        // the m_impl server object to be destroyed synchronously. This can
628
        // happen either if the interface did not define a "destroy" method (see
629
        // invokeDestroy method below), or if a destroy method was defined, but
630
        // the connection was broken before it could be called.
631
        //
632
        // In either case, be conservative and run the cleanup on an
633
        // asynchronous thread, to avoid destructors or cleanup functions
634
        // blocking or deadlocking the current EventLoop thread, since they
635
        // could be making IPC calls.
636
        //
637
        // Technically this is a little too conservative since if the interface
638
        // defines a "destroy" method, but the destroy method does not accept a
639
        // Context parameter specifying a worker thread, the cleanup method
640
        // would run on the EventLoop thread normally (when connection is
641
        // unbroken), but will not run on the EventLoop thread now (when
642
        // connection is broken). Probably some refactoring of the destructor
643
        // and invokeDestroy function is possible to make this cleaner and more
644
        // consistent.
645
0
        m_context.loop->addAsyncCleanup([impl=std::move(m_impl), fns=std::move(m_context.cleanup_fns)]() mutable {
646
0
            impl.reset();
647
0
            CleanupRun(fns);
648
0
        });
649
0
    }
650
6
    assert(m_context.cleanup_fns.empty());
651
6
    MP_LOG(*m_context.loop, Log::Debug) << "Destroying " << CxxTypeName(*this) << " " << this;
652
6
}
653
654
//! If the capnp interface defined a special "destroy" method, as described the
655
//! ProxyClientBase class, this method will be called and synchronously destroy
656
//! m_impl before returning to the client.
657
//!
658
//! If the capnp interface does not define a "destroy" method, this will never
659
//! be called and the ~ProxyServerBase destructor will be responsible for
660
//! deleting m_impl asynchronously, whenever the ProxyServer object gets garbage
661
//! collected by Cap'n Proto.
662
//!
663
//! This method is called in the same way other proxy server methods are called,
664
//! via the serverInvoke function. Basically serverInvoke just calls this as a
665
//! substitute for a non-existent m_impl->destroy() method. If the destroy
666
//! method has any parameters or return values they will be handled in the
667
//! normal way by PassField/ReadField/BuildField functions. Particularly if a
668
//! Context.thread parameter was passed, this method will run on the worker
669
//! thread specified by the client. Otherwise it will run on the EventLoop
670
//! thread, like other server methods without an assigned thread.
671
template <typename Interface, typename Impl>
672
void ProxyServerBase<Interface, Impl>::invokeDestroy()
673
6
{
674
6
    m_impl.reset();
675
6
    CleanupRun(m_context.cleanup_fns);
676
6
}
Unexecuted instantiation: mp::ProxyServerBase<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>::invokeDestroy()
mp::ProxyServerBase<ipc::capnp::messages::Echo, interfaces::Echo>::invokeDestroy()
Line
Count
Source
673
6
{
674
6
    m_impl.reset();
675
6
    CleanupRun(m_context.cleanup_fns);
676
6
}
677
678
//! Map from Connection to local or remote thread handle which will be used over
679
//! that connection. This map will typically only contain one entry, but can
680
//! contain multiple if a single thread makes IPC calls over multiple
681
//! connections. A std::optional value type is used to avoid the map needing to
682
//! be locked while ProxyClient<Thread> objects are constructed, see
683
//! ThreadContext "Synchronization note" below.
684
using ConnThreads = std::map<Connection*, std::optional<ProxyClient<Thread>>>;
685
using ConnThread = ConnThreads::iterator;
686
687
// Retrieve ProxyClient<Thread> object associated with this connection from a
688
// map, or create a new one and insert it into the map. Return map iterator and
689
// inserted bool.
690
std::tuple<ConnThread, bool> SetThread(GuardedRef<ConnThreads> threads, Connection* connection, const std::function<Thread::Client()>& make_thread);
691
692
//! The thread_local ThreadContext g_thread_context struct provides information
693
//! about individual threads and a way of communicating between them. Because
694
//! it's a thread local struct, each ThreadContext instance is initialized by
695
//! the thread that owns it.
696
//!
697
//! ThreadContext is used for any client threads created externally which make
698
//! IPC calls, and for server threads created by
699
//! ProxyServer<ThreadMap>::makeThread() which execute IPC calls for clients.
700
//!
701
//! In both cases, the struct holds information like the thread name, and a
702
//! Waiter object where the EventLoop can post incoming IPC requests to execute
703
//! on the thread. The struct also holds ConnThread maps associating the thread
704
//! with local and remote ProxyClient<Thread> objects.
705
struct ThreadContext
706
{
707
    //! Identifying string for debug.
708
    std::string thread_name;
709
710
    //! Waiter object used to allow remote clients to execute code on this
711
    //! thread. For server threads created by
712
    //! ProxyServer<ThreadMap>::makeThread(), this is initialized in that
713
    //! function. Otherwise, for client threads created externally, this is
714
    //! initialized the first time the thread tries to make an IPC call. Having
715
    //! a waiter is necessary for threads making IPC calls in case a server they
716
    //! are calling expects them to execute a callback during the call, before
717
    //! it sends a response.
718
    //!
719
    //! For IPC client threads, the Waiter pointer is never cleared and the Waiter
720
    //! just gets destroyed when the thread does. For server threads created by
721
    //! makeThread(), this pointer is set to null in the ~ProxyServer<Thread> as
722
    //! a signal for the thread to exit and destroy itself. In both cases, the
723
    //! same Waiter object is used across different calls and only created and
724
    //! destroyed once for the lifetime of the thread.
725
    std::unique_ptr<Waiter> waiter = nullptr;
726
727
    //! When client is making a request to a server, this is the
728
    //! `callbackThread` argument it passes in the request, used by the server
729
    //! in case it needs to make callbacks into the client that need to execute
730
    //! while the client is waiting. This will be set to a local thread object.
731
    //!
732
    //! Synchronization note: The callback_thread and request_thread maps are
733
    //! only ever accessed internally by this thread's destructor and externally
734
    //! by Cap'n Proto event loop threads. Since it's possible for IPC client
735
    //! threads to make calls over different connections that could have
736
    //! different event loops, these maps are guarded by Waiter::m_mutex in case
737
    //! different event loop threads add or remove map entries simultaneously.
738
    //! However, individual ProxyClient<Thread> objects in the maps will only be
739
    //! associated with one event loop and guarded by EventLoop::m_mutex. So
740
    //! Waiter::m_mutex does not need to be held while accessing individual
741
    //! ProxyClient<Thread> instances, and may even need to be released to
742
    //! respect lock order and avoid locking Waiter::m_mutex before
743
    //! EventLoop::m_mutex.
744
    ConnThreads callback_threads MP_GUARDED_BY(waiter->m_mutex);
745
746
    //! When client is making a request to a server, this is the `thread`
747
    //! argument it passes in the request, used to control which thread on
748
    //! server will be responsible for executing it. If client call is being
749
    //! made from a local thread, this will be a remote thread object returned
750
    //! by makeThread. If a client call is being made from a thread currently
751
    //! handling a server request, this will be set to the `callbackThread`
752
    //! request thread argument passed in that request.
753
    //!
754
    //! Synchronization note: \ref callback_threads note applies here as well.
755
    ConnThreads request_threads MP_GUARDED_BY(waiter->m_mutex);
756
757
    //! Whether this thread is a capnp event loop thread. Not really used except
758
    //! to assert false if there's an attempt to execute a blocking operation
759
    //! which could deadlock the thread.
760
    bool loop_thread = false;
761
};
762
763
template<typename T, typename Fn>
764
kj::Promise<T> ProxyServer<Thread>::post(Fn&& fn)
765
26
{
766
26
    auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again.
767
26
    auto cancel_monitor_ptr = kj::heap<CancelMonitor>();
768
26
    CancelMonitor& cancel_monitor = *cancel_monitor_ptr;
769
    // Keep a reference to the ProxyServer<Thread> instance by assigning it to
770
    // the self variable. ProxyServer instances are reference-counted and if the
771
    // client drops its reference, this variable keeps the instance alive until
772
    // the thread finishes executing. The self variable needs to be destroyed on
773
    // the event loop thread so it is freed in a sync() call below.
774
26
    auto self = thisCap();
775
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 {
776
26
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
26
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
26
                ready_fulfiller->fulfill();
788
26
                ready_fulfiller = nullptr;
789
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
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
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
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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()()
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'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
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
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
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
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
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
26
            std::optional<T> result_value;
791
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
791
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
791
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'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
791
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
791
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
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
26
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
26
                KJ_IF_MAYBE(e, exception) {
801
0
                    assert(!result_value);
802
0
                    result_fulfiller->reject(kj::mv(*e));
803
26
                } else {
804
26
                    assert(result_value);
805
26
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
26
                    result_value.reset();
807
26
                }
808
26
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
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
813
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
813
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'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
813
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
813
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
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
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
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
0
                    assert(!result_value);
802
0
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
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
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
0
                    assert(!result_value);
802
0
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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()()
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'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
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
0
                    assert(!result_value);
802
0
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
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
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
0
                    assert(!result_value);
802
0
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
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
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
0
                    assert(!result_value);
802
0
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
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
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
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
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
4
            });
790
4
            std::optional<T> result_value;
791
4
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
4
                    assert(!result_value);
802
4
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
4
            });
815
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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()()
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'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
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
4
            });
790
4
            std::optional<T> result_value;
791
4
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
4
                    assert(!result_value);
802
4
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
4
            });
815
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
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
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
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
6
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
26
        assert(posted);
821
26
        return kj::mv(result.promise);
822
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
775
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 {
776
6
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
6
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
6
        assert(posted);
821
6
        return kj::mv(result.promise);
822
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
775
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 {
776
4
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
4
            });
790
4
            std::optional<T> result_value;
791
4
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
4
                    assert(!result_value);
802
4
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
4
            });
815
4
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
4
        assert(posted);
821
4
        return kj::mv(result.promise);
822
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)::'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()()
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)::'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
775
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 {
776
4
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
4
            });
790
4
            std::optional<T> result_value;
791
4
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
4
                    assert(!result_value);
802
4
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
4
            });
815
4
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
4
        assert(posted);
821
4
        return kj::mv(result.promise);
822
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
775
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 {
776
6
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
6
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
6
        assert(posted);
821
6
        return kj::mv(result.promise);
822
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
775
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 {
776
6
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
6
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
6
        assert(posted);
821
6
        return kj::mv(result.promise);
822
6
    }).attach(kj::heap<CancelProbe>(cancel_monitor));
823
26
    m_thread_ready = kj::mv(ready.promise);
824
26
    return ret;
825
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
765
6
{
766
6
    auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again.
767
6
    auto cancel_monitor_ptr = kj::heap<CancelMonitor>();
768
6
    CancelMonitor& cancel_monitor = *cancel_monitor_ptr;
769
    // Keep a reference to the ProxyServer<Thread> instance by assigning it to
770
    // the self variable. ProxyServer instances are reference-counted and if the
771
    // client drops its reference, this variable keeps the instance alive until
772
    // the thread finishes executing. The self variable needs to be destroyed on
773
    // the event loop thread so it is freed in a sync() call below.
774
6
    auto self = thisCap();
775
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 {
776
6
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
6
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
6
        assert(posted);
821
6
        return kj::mv(result.promise);
822
6
    }).attach(kj::heap<CancelProbe>(cancel_monitor));
823
6
    m_thread_ready = kj::mv(ready.promise);
824
6
    return ret;
825
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
765
4
{
766
4
    auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again.
767
4
    auto cancel_monitor_ptr = kj::heap<CancelMonitor>();
768
4
    CancelMonitor& cancel_monitor = *cancel_monitor_ptr;
769
    // Keep a reference to the ProxyServer<Thread> instance by assigning it to
770
    // the self variable. ProxyServer instances are reference-counted and if the
771
    // client drops its reference, this variable keeps the instance alive until
772
    // the thread finishes executing. The self variable needs to be destroyed on
773
    // the event loop thread so it is freed in a sync() call below.
774
4
    auto self = thisCap();
775
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 {
776
4
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
4
            });
790
4
            std::optional<T> result_value;
791
4
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
4
                    assert(!result_value);
802
4
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
4
            });
815
4
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
4
        assert(posted);
821
4
        return kj::mv(result.promise);
822
4
    }).attach(kj::heap<CancelProbe>(cancel_monitor));
823
4
    m_thread_ready = kj::mv(ready.promise);
824
4
    return ret;
825
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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>::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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&, 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::SubmitSolutionOld7Params, ipc::capnp::messages::BlockTemplate::SubmitSolutionOld7Results>>&&)
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>>&&)
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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::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::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<unsigned int, unsigned int, unsigned int, std::shared_ptr<CTransaction 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::BlockTemplate>, capnp::CallContext<ipc::capnp::messages::BlockTemplate::SubmitSolutionParams, ipc::capnp::messages::BlockTemplate::SubmitSolutionResults>>&&)
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
765
4
{
766
4
    auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again.
767
4
    auto cancel_monitor_ptr = kj::heap<CancelMonitor>();
768
4
    CancelMonitor& cancel_monitor = *cancel_monitor_ptr;
769
    // Keep a reference to the ProxyServer<Thread> instance by assigning it to
770
    // the self variable. ProxyServer instances are reference-counted and if the
771
    // client drops its reference, this variable keeps the instance alive until
772
    // the thread finishes executing. The self variable needs to be destroyed on
773
    // the event loop thread so it is freed in a sync() call below.
774
4
    auto self = thisCap();
775
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 {
776
4
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
4
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
4
                ready_fulfiller->fulfill();
788
4
                ready_fulfiller = nullptr;
789
4
            });
790
4
            std::optional<T> result_value;
791
4
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
4
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
4
                KJ_IF_MAYBE(e, exception) {
801
4
                    assert(!result_value);
802
4
                    result_fulfiller->reject(kj::mv(*e));
803
4
                } else {
804
4
                    assert(result_value);
805
4
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
4
                    result_value.reset();
807
4
                }
808
4
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
4
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
4
            });
815
4
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
4
        assert(posted);
821
4
        return kj::mv(result.promise);
822
4
    }).attach(kj::heap<CancelProbe>(cancel_monitor));
823
4
    m_thread_ready = kj::mv(ready.promise);
824
4
    return ret;
825
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
765
6
{
766
6
    auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again.
767
6
    auto cancel_monitor_ptr = kj::heap<CancelMonitor>();
768
6
    CancelMonitor& cancel_monitor = *cancel_monitor_ptr;
769
    // Keep a reference to the ProxyServer<Thread> instance by assigning it to
770
    // the self variable. ProxyServer instances are reference-counted and if the
771
    // client drops its reference, this variable keeps the instance alive until
772
    // the thread finishes executing. The self variable needs to be destroyed on
773
    // the event loop thread so it is freed in a sync() call below.
774
6
    auto self = thisCap();
775
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 {
776
6
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
6
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
6
        assert(posted);
821
6
        return kj::mv(result.promise);
822
6
    }).attach(kj::heap<CancelProbe>(cancel_monitor));
823
6
    m_thread_ready = kj::mv(ready.promise);
824
6
    return ret;
825
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
765
6
{
766
6
    auto ready = kj::newPromiseAndFulfiller<void>(); // Signaled when waiter is ready to post again.
767
6
    auto cancel_monitor_ptr = kj::heap<CancelMonitor>();
768
6
    CancelMonitor& cancel_monitor = *cancel_monitor_ptr;
769
    // Keep a reference to the ProxyServer<Thread> instance by assigning it to
770
    // the self variable. ProxyServer instances are reference-counted and if the
771
    // client drops its reference, this variable keeps the instance alive until
772
    // the thread finishes executing. The self variable needs to be destroyed on
773
    // the event loop thread so it is freed in a sync() call below.
774
6
    auto self = thisCap();
775
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 {
776
6
        auto result = kj::newPromiseAndFulfiller<T>(); // Signaled when fn() is called, with its return value.
777
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 {
778
            // Fulfill ready.promise now, as soon as the Waiter starts executing
779
            // this lambda, so the next ProxyServer<Thread>::post() call can
780
            // immediately call waiter->post(). It is important to do this
781
            // before calling fn() because fn() can make an IPC call back to the
782
            // client, which can make another IPC call to this server thread.
783
            // (This typically happens when IPC methods take std::function
784
            // parameters.) When this happens the second call to the server
785
            // thread should not be blocked waiting for the first call.
786
6
            m_loop->sync([ready_fulfiller = kj::mv(ready_fulfiller)]() mutable {
787
6
                ready_fulfiller->fulfill();
788
6
                ready_fulfiller = nullptr;
789
6
            });
790
6
            std::optional<T> result_value;
791
6
            kj::Maybe<kj::Exception> exception{kj::runCatchingExceptions([&]{ result_value.emplace(fn(*cancel_monitor_ptr)); })};
792
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 {
793
                // Destroy CancelMonitor here before fulfilling or rejecting the
794
                // promise so it doesn't get triggered when the promise is
795
                // destroyed.
796
6
                cancel_monitor_ptr = nullptr;
797
                // Send results to the fulfiller. Technically it would be ok to
798
                // skip this if promise was canceled, but it's simpler to just
799
                // do it unconditionally.
800
6
                KJ_IF_MAYBE(e, exception) {
801
6
                    assert(!result_value);
802
6
                    result_fulfiller->reject(kj::mv(*e));
803
6
                } else {
804
6
                    assert(result_value);
805
6
                    result_fulfiller->fulfill(kj::mv(*result_value));
806
6
                    result_value.reset();
807
6
                }
808
6
                result_fulfiller = nullptr;
809
                // Use evalLater to destroy the ProxyServer<Thread> self
810
                // reference, if it is the last reference, because the
811
                // ProxyServer<Thread> destructor needs to join the thread,
812
                // which can't happen until this sync() block has exited.
813
6
                m_loop->m_task_set->add(kj::evalLater([self = kj::mv(self)] {}));
814
6
            });
815
6
        });
816
        // Assert that calling Waiter::post did not fail. It could only return
817
        // false if a new function was posted before the previous one finished
818
        // executing, but new functions are only posted when m_thread_ready is
819
        // signaled, so this should never happen.
820
6
        assert(posted);
821
6
        return kj::mv(result.promise);
822
6
    }).attach(kj::heap<CancelProbe>(cancel_monitor));
823
6
    m_thread_ready = kj::mv(ready.promise);
824
6
    return ret;
825
6
}
826
827
//! Given stream file descriptor, make a new ProxyClient object to send requests
828
//! over the stream. Also create a new Connection object embedded in the
829
//! client that is freed when the client is closed.
830
template <typename InitInterface>
831
std::unique_ptr<ProxyClient<InitInterface>> ConnectStream(EventLoop& loop, int fd)
832
10
{
833
10
    typename InitInterface::Client init_client(nullptr);
834
10
    std::unique_ptr<Connection> connection;
835
10
    loop.sync([&] {
836
10
        auto stream =
837
10
            loop.m_io_context.lowLevelProvider->wrapSocketFd(fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP);
838
10
        connection = std::make_unique<Connection>(loop, kj::mv(stream));
839
10
        init_client = connection->m_rpc_system->bootstrap(ServerVatId().vat_id).castAs<InitInterface>();
840
10
        Connection* connection_ptr = connection.get();
841
10
        connection->onDisconnect([&loop, connection_ptr] {
842
0
            MP_LOG(loop, Log::Warning) << "IPC client: unexpected network disconnect.";
843
0
            delete connection_ptr;
844
0
        });
845
10
    });
846
10
    return std::make_unique<ProxyClient<InitInterface>>(
847
10
        kj::mv(init_client), connection.release(), /* destroy_connection= */ true);
848
10
}
849
850
//! Given stream and init objects, construct a new ProxyServer object that
851
//! handles requests from the stream by calling the init object. Embed the
852
//! ProxyServer in a Connection object that is stored and erased if
853
//! disconnected. This should be called from the event loop thread.
854
template <typename InitInterface, typename InitImpl, typename OnDisconnect>
855
void _Serve(EventLoop& loop, kj::Own<kj::AsyncIoStream>&& stream, InitImpl& init, OnDisconnect&& on_disconnect)
856
10
{
857
10
    loop.m_incoming_connections.emplace_front(loop, kj::mv(stream), [&](Connection& connection) {
858
        // Disable deleter so proxy server object doesn't attempt to delete the
859
        // init implementation when the proxy client is destroyed or
860
        // disconnected.
861
10
        return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection);
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)::'lambda'(mp::Connection&)::operator()(mp::Connection&) const::'lambda'(interfaces::Init*)::operator()(interfaces::Init*) const
Line
Count
Source
861
9
        return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection);
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)::'lambda'(mp::Connection&)::operator()(mp::Connection&) const::'lambda'(interfaces::Init*)::operator()(interfaces::Init*) const
Line
Count
Source
861
1
        return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection);
862
10
    });
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)::'lambda'(mp::Connection&)::operator()(mp::Connection&) const
Line
Count
Source
857
9
    loop.m_incoming_connections.emplace_front(loop, kj::mv(stream), [&](Connection& connection) {
858
        // Disable deleter so proxy server object doesn't attempt to delete the
859
        // init implementation when the proxy client is destroyed or
860
        // disconnected.
861
9
        return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection);
862
9
    });
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)::'lambda'(mp::Connection&)::operator()(mp::Connection&) const
Line
Count
Source
857
1
    loop.m_incoming_connections.emplace_front(loop, kj::mv(stream), [&](Connection& connection) {
858
        // Disable deleter so proxy server object doesn't attempt to delete the
859
        // init implementation when the proxy client is destroyed or
860
        // disconnected.
861
1
        return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection);
862
1
    });
863
10
    auto it = loop.m_incoming_connections.begin();
864
10
    MP_LOG(loop, Log::Info) << "IPC server: socket connected.";
865
10
    if (loop.testing_hook_connected) loop.testing_hook_connected();
866
10
    it->onDisconnect([&loop, it, on_disconnect = std::forward<OnDisconnect>(on_disconnect)]() mutable {
867
10
        MP_LOG(loop, Log::Info) << "IPC server: socket disconnected.";
868
10
        loop.m_incoming_connections.erase(it);
869
10
        on_disconnect();
870
10
        if (loop.testing_hook_disconnected) loop.testing_hook_disconnected();
871
10
    });
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)::'lambda'()::operator()()
Line
Count
Source
866
9
    it->onDisconnect([&loop, it, on_disconnect = std::forward<OnDisconnect>(on_disconnect)]() mutable {
867
9
        MP_LOG(loop, Log::Info) << "IPC server: socket disconnected.";
868
9
        loop.m_incoming_connections.erase(it);
869
9
        on_disconnect();
870
9
        if (loop.testing_hook_disconnected) loop.testing_hook_disconnected();
871
9
    });
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)::'lambda'()::operator()()
Line
Count
Source
866
1
    it->onDisconnect([&loop, it, on_disconnect = std::forward<OnDisconnect>(on_disconnect)]() mutable {
867
1
        MP_LOG(loop, Log::Info) << "IPC server: socket disconnected.";
868
1
        loop.m_incoming_connections.erase(it);
869
1
        on_disconnect();
870
1
        if (loop.testing_hook_disconnected) loop.testing_hook_disconnected();
871
1
    });
872
10
}
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::_Listen<ipc::capnp::messages::Init, interfaces::Init>(std::shared_ptr<mp::Listener> const&, mp::EventLoop&, interfaces::Init&)::'lambda'(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&)::operator()(kj::Own<kj::AsyncIoStream, std::nullptr_t>&&) const::'lambda'()&&)
Line
Count
Source
856
9
{
857
9
    loop.m_incoming_connections.emplace_front(loop, kj::mv(stream), [&](Connection& connection) {
858
        // Disable deleter so proxy server object doesn't attempt to delete the
859
        // init implementation when the proxy client is destroyed or
860
        // disconnected.
861
9
        return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection);
862
9
    });
863
9
    auto it = loop.m_incoming_connections.begin();
864
9
    MP_LOG(loop, Log::Info) << "IPC server: socket connected.";
865
9
    if (loop.testing_hook_connected) loop.testing_hook_connected();
866
9
    it->onDisconnect([&loop, it, on_disconnect = std::forward<OnDisconnect>(on_disconnect)]() mutable {
867
9
        MP_LOG(loop, Log::Info) << "IPC server: socket disconnected.";
868
9
        loop.m_incoming_connections.erase(it);
869
9
        on_disconnect();
870
9
        if (loop.testing_hook_disconnected) loop.testing_hook_disconnected();
871
9
    });
872
9
}
void mp::_Serve<ipc::capnp::messages::Init, interfaces::Init, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()>(mp::EventLoop&, kj::Own<kj::AsyncIoStream, std::nullptr_t>&&, interfaces::Init&, void mp::ServeStream<ipc::capnp::messages::Init, interfaces::Init>(mp::EventLoop&, int, interfaces::Init&)::'lambda'()&&)
Line
Count
Source
856
1
{
857
1
    loop.m_incoming_connections.emplace_front(loop, kj::mv(stream), [&](Connection& connection) {
858
        // Disable deleter so proxy server object doesn't attempt to delete the
859
        // init implementation when the proxy client is destroyed or
860
        // disconnected.
861
1
        return kj::heap<ProxyServer<InitInterface>>(std::shared_ptr<InitImpl>(&init, [](InitImpl*){}), connection);
862
1
    });
863
1
    auto it = loop.m_incoming_connections.begin();
864
1
    MP_LOG(loop, Log::Info) << "IPC server: socket connected.";
865
1
    if (loop.testing_hook_connected) loop.testing_hook_connected();
866
1
    it->onDisconnect([&loop, it, on_disconnect = std::forward<OnDisconnect>(on_disconnect)]() mutable {
867
1
        MP_LOG(loop, Log::Info) << "IPC server: socket disconnected.";
868
1
        loop.m_incoming_connections.erase(it);
869
1
        on_disconnect();
870
1
        if (loop.testing_hook_disconnected) loop.testing_hook_disconnected();
871
1
    });
872
1
}
873
874
struct Listener
875
{
876
    explicit Listener(kj::Own<kj::ConnectionReceiver>&& receiver, std::optional<size_t> max_connections)
877
3
        : m_receiver(kj::mv(receiver)), m_max_connections(max_connections) {}
878
879
    bool atCapacity() const
880
21
    {
881
21
        return m_max_connections && m_active_connections >= *m_max_connections;
882
21
    }
883
884
    kj::Own<kj::ConnectionReceiver> m_receiver;
885
    std::optional<size_t> m_max_connections;
886
    size_t m_active_connections{0};
887
};
888
889
template <typename InitInterface, typename InitImpl>
890
void _Listen(const std::shared_ptr<Listener>& listener, EventLoop& loop, InitImpl& init)
891
12
{
892
12
    if (listener->atCapacity()) return;
893
894
12
    auto* receiver = listener->m_receiver.get();
895
12
    loop.m_task_set->add(receiver->accept().then(
896
12
        [&loop, &init, listener](kj::Own<kj::AsyncIoStream>&& stream) {
897
9
            ++listener->m_active_connections;
898
9
            _Serve<InitInterface>(loop, kj::mv(stream), init, [&loop, &init, listener] {
899
9
                const bool resume_accept{listener->atCapacity()};
900
9
                assert(listener->m_active_connections > 0);
901
9
                --listener->m_active_connections;
902
9
                if (resume_accept) _Listen<InitInterface>(listener, loop, init);
903
9
            });
904
9
            _Listen<InitInterface>(listener, loop, init);
905
9
        }));
906
12
}
907
908
//! Given stream file descriptor and an init object, handle requests on the
909
//! stream by calling methods on the Init object.
910
template <typename InitInterface, typename InitImpl>
911
void ServeStream(EventLoop& loop, int fd, InitImpl& init)
912
1
{
913
1
    _Serve<InitInterface>(
914
1
        loop,
915
1
        loop.m_io_context.lowLevelProvider->wrapSocketFd(fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP),
916
1
        init,
917
1
        [] {});
918
1
}
919
920
//! Given listening socket file descriptor and an init object, handle incoming
921
//! connections and requests by calling methods on the Init object.
922
template <typename InitInterface, typename InitImpl>
923
void ListenConnections(EventLoop& loop, int fd, InitImpl& init, std::optional<size_t> max_connections = std::nullopt)
924
3
{
925
3
    loop.sync([&]() {
926
3
        auto listener{std::make_shared<Listener>(
927
3
            loop.m_io_context.lowLevelProvider->wrapListenSocketFd(fd, kj::LowLevelAsyncIoProvider::TAKE_OWNERSHIP),
928
3
            max_connections)};
929
3
        _Listen<InitInterface>(listener, loop, init);
930
3
    });
931
3
}
932
933
extern thread_local ThreadContext g_thread_context; // NOLINT(bitcoin-nontrivial-threadlocal)
934
// Silence nonstandard bitcoin tidy error "Variable with non-trivial destructor
935
// cannot be thread_local" which should not be a problem on modern platforms, and
936
// could lead to a small memory leak at worst on older ones.
937
938
} // namespace mp
939
940
#endif // MP_PROXY_IO_H