mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-23 14:10:15 +01:00
Add ipc::Context and ipc::capnp::Context structs
These are currently empty structs but they will be used to pass some function and object pointers from bitcoin application code to IPC hooks that run, for example, when a remote object is created or destroyed, or a new process is created.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <interfaces/init.h>
|
||||
#include <ipc/capnp/context.h>
|
||||
#include <ipc/capnp/init.capnp.h>
|
||||
#include <ipc/capnp/init.capnp.proxy.h>
|
||||
#include <ipc/capnp/protocol.h>
|
||||
@@ -54,7 +55,7 @@ public:
|
||||
{
|
||||
assert(!m_loop);
|
||||
mp::g_thread_context.thread_name = mp::ThreadName(exe_name);
|
||||
m_loop.emplace(exe_name, &IpcLogFn, nullptr);
|
||||
m_loop.emplace(exe_name, &IpcLogFn, &m_context);
|
||||
mp::ServeStream<messages::Init>(*m_loop, fd, init);
|
||||
m_loop->loop();
|
||||
m_loop.reset();
|
||||
@@ -63,13 +64,14 @@ public:
|
||||
{
|
||||
mp::ProxyTypeRegister::types().at(type)(iface).cleanup.emplace_back(std::move(cleanup));
|
||||
}
|
||||
Context& context() override { return m_context; }
|
||||
void startLoop(const char* exe_name)
|
||||
{
|
||||
if (m_loop) return;
|
||||
std::promise<void> promise;
|
||||
m_loop_thread = std::thread([&] {
|
||||
util::ThreadRename("capnp-loop");
|
||||
m_loop.emplace(exe_name, &IpcLogFn, nullptr);
|
||||
m_loop.emplace(exe_name, &IpcLogFn, &m_context);
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(m_loop->m_mutex);
|
||||
m_loop->addClient(lock);
|
||||
@@ -80,6 +82,7 @@ public:
|
||||
});
|
||||
promise.get_future().wait();
|
||||
}
|
||||
Context m_context;
|
||||
std::thread m_loop_thread;
|
||||
std::optional<mp::EventLoop> m_loop;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user