mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-15 01:58:09 +02:00
Squashed 'src/ipc/libmultiprocess/' changes from a4f92969649..1fc65008f7d
1fc65008f7d Merge bitcoin-core/libmultiprocess#237: Made SpawnProcess() behavior safe post fork() 5205a87cd90 test: check SpawnProcess post-fork safety 69652f0edfa Precompute argv before fork in SpawnProcess 30a8681de62 SpawnProcess: avoid fd leak on close failure d0fc1081d09 Merge bitcoin-core/libmultiprocess#196: ci: Add NetBSD job 7b171f45bfc Merge bitcoin-core/libmultiprocess#234: doc: Fix typos and grammar in documentation and comments 861da39cae9 ci: Add NetBSD job 458745e3940 Fix various typos, spelling mistakes, and grammatical errors in design.md and source code comments. 585decc8561 Merge bitcoin-core/libmultiprocess#236: ci: Install binary package `capnproto` on OpenBSD instead of building it 14e926a3ff3 refactor: extract MakeArgv helper 1ee909393f4 ci: Install binary package `capnproto` on OpenBSD instead of building it 470fc518d4b Merge bitcoin-core/libmultiprocess#230: cmake: add ONLY_CAPNP target_capnp_sources option 2d8886f26c4 Merge bitcoin-core/libmultiprocess#228: Add versions.md and version.h files describing version branches and tags c1838be565d Merge bitcoin-core/libmultiprocess#225: Improve and document act support a173f1704ce Merge bitcoin-core/libmultiprocess#223: ci: Replace nix-shell with equivalent nix develop command 625eaca42fb Merge bitcoin-core/libmultiprocess#229: Design Documentation Update cc234be73a6 Design doc update 81c652687b8 cmake: add ONLY_CAPNP target_capnp_sources option 6e01d2d766e Add versions.md and version.h files describing version branches and tags 4e3f8fa0d2c doc: add instructions for using act 81712ff6bbf ci: disable KVM and sandbox inside act containers 18a2237a8ef ci: Replace nix-shell with equivalent nix develop command git-subtree-dir: src/ipc/libmultiprocess git-subtree-split: 1fc65008f7d64161e84c08cbd93109a23dd6a1e9
This commit is contained in:
@@ -317,12 +317,12 @@ public:
|
||||
void* m_context;
|
||||
};
|
||||
|
||||
//! Single element task queue used to handle recursive capnp calls. (If server
|
||||
//! makes an callback into the client in the middle of a request, while client
|
||||
//! Single element task queue used to handle recursive capnp calls. (If the
|
||||
//! server makes a callback into the client in the middle of a request, while the client
|
||||
//! thread is blocked waiting for server response, this is what allows the
|
||||
//! client to run the request in the same thread, the same way code would run in
|
||||
//! single process, with the callback sharing same thread stack as the original
|
||||
//! call.
|
||||
//! client to run the request in the same thread, the same way code would run in a
|
||||
//! single process, with the callback sharing the same thread stack as the original
|
||||
//! call.)
|
||||
struct Waiter
|
||||
{
|
||||
Waiter() = default;
|
||||
|
||||
@@ -87,7 +87,7 @@ struct StructField
|
||||
// actually construct the read destination object. For example, if a std::string
|
||||
// is being read, the ReadField call will call the custom emplace_fn with char*
|
||||
// and size_t arguments, and the emplace function can decide whether to call the
|
||||
// constructor via the operator or make_shared or emplace or just return a
|
||||
// constructor via the operator, make_shared, emplace or just return a
|
||||
// temporary string that is moved from.
|
||||
template <typename LocalType, typename EmplaceFn>
|
||||
struct ReadDestEmplace
|
||||
@@ -205,11 +205,11 @@ void BuildField(TypeList<LocalTypes...>, Context& context, Output&& output, Valu
|
||||
}
|
||||
}
|
||||
|
||||
// Adapter to let BuildField overloads methods work set & init list elements as
|
||||
// if they were fields of a struct. If BuildField is changed to use some kind of
|
||||
// accessor class instead of calling method pointers, then then maybe this could
|
||||
// go away or be simplified, because would no longer be a need to return
|
||||
// ListOutput method pointers emulating capnp struct method pointers..
|
||||
// Adapter that allows BuildField overloads to work with, set, and initialize list
|
||||
// elements as if they were fields of a struct. If BuildField is changed to use some
|
||||
// kind of accessor class instead of calling method pointers, then maybe this could
|
||||
// go away or be simplified, because there would no longer be a need to return
|
||||
// ListOutput method pointers emulating capnp struct method pointers.
|
||||
template <typename ListType>
|
||||
struct ListOutput;
|
||||
|
||||
|
||||
@@ -221,13 +221,16 @@ using FdToArgsFn = std::function<std::vector<std::string>(int fd)>;
|
||||
|
||||
//! Spawn a new process that communicates with the current process over a socket
|
||||
//! pair. Returns pid through an output argument, and file descriptor for the
|
||||
//! local side of the socket. Invokes fd_to_args callback with the remote file
|
||||
//! descriptor number which returns the command line arguments that should be
|
||||
//! used to execute the process, and which should have the remote file
|
||||
//! descriptor embedded in whatever format the child process expects.
|
||||
//! local side of the socket.
|
||||
//! The fd_to_args callback is invoked in the parent process before fork().
|
||||
//! It must not rely on child pid/state, and must return the command line
|
||||
//! arguments that should be used to execute the process. Embed the remote file
|
||||
//! descriptor number in whatever format the child process expects.
|
||||
int SpawnProcess(int& pid, FdToArgsFn&& fd_to_args);
|
||||
|
||||
//! Call execvp with vector args.
|
||||
//! Not safe to call in a post-fork child of a multi-threaded process.
|
||||
//! Currently only used by mpgen at build time.
|
||||
void ExecProcess(const std::vector<std::string>& args);
|
||||
|
||||
//! Wait for a process to exit and return its exit code.
|
||||
|
||||
26
include/mp/version.h
Normal file
26
include/mp/version.h
Normal file
@@ -0,0 +1,26 @@
|
||||
// Copyright (c) The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef MP_VERSION_H
|
||||
#define MP_VERSION_H
|
||||
|
||||
//! Major version number. Should be incremented in the master branch before
|
||||
//! changes that introduce major new features or break API compatibility, if
|
||||
//! there are clients relying on the previous API. (If an API changes multiple
|
||||
//! times and nothing uses the intermediate changes, it is sufficient to
|
||||
//! increment this only once before the first change.)
|
||||
//!
|
||||
//! Each time this is incremented, a new stable branch should be created. E.g.
|
||||
//! when this is incremented to 8, a "v7" stable branch should be created
|
||||
//! pointing at the prior merge commit. The /doc/versions.md file should also be
|
||||
//! updated, noting any significant or incompatible changes made since the
|
||||
//! previous version, and backported to the stable branch before it is tagged.
|
||||
#define MP_MAJOR_VERSION 7
|
||||
|
||||
//! Minor version number. Should be incremented in stable branches after
|
||||
//! backporting changes. The /doc/versions.md file in the master and stable
|
||||
//! branches should also be updated to list the new minor version.
|
||||
#define MP_MINOR_VERSION 0
|
||||
|
||||
#endif // MP_VERSION_H
|
||||
Reference in New Issue
Block a user