Skip to content

Commit 1d7edee

Browse files
committed
Merge bitcoin/bitcoin#34977: Update libmultiprocess subtree to fix test timeout
7a6d210 Squashed 'src/ipc/libmultiprocess/' changes from 70f632bda8..3edbe8f67c (Sjors Provoost) Pull request description: - bitcoin-core/libmultiprocess#266 - bitcoin-core/libmultiprocess#267 - bitcoin-core/libmultiprocess#268 Branch is based on 613a548 from #34804 for easy backport. Fixes #34975. ACKs for top commit: achow101: ACK 66b4e30 ryanofsky: Code review ACK 66b4e30. Reviewed changes and verified subtree matches. Since this branch is based on 613a548 it can be merged into both 31.x and master branches (if another PR is opened for 31.x). Tree-SHA512: 63449236b206f07541f7ea295111eef9a2ddfd1da986b8ce2068c59201e92c36f30f9bde5478bf4b704208e71b10352140649a54b7671e1d8af4869917125f47
2 parents d868667 + 66b4e30 commit 1d7edee

4 files changed

Lines changed: 17 additions & 11 deletions

File tree

src/ipc/libmultiprocess/doc/versions.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,37 @@ Library versions are tracked with simple
77
Versioning policy is described in the [version.h](../include/mp/version.h)
88
include.
99

10-
## v9
10+
## v10
1111
- Current unstable version.
1212

13+
## [v9.0](https://github.com/bitcoin-core/libmultiprocess/commits/v9.0)
14+
- Fixes race conditions where worker thread could be used after destruction, where getParams() could be called after request cancel, and where m_on_cancel could be called after request finishes.
15+
- Adds `CustomHasField` hook to map Cap'n Proto null values to C++ null values.
16+
- Improves `CustomBuildField` for `std::optional` to use move semantics.
17+
- Adds LLVM 22 compatibility fix in type-map.
18+
- Used in Bitcoin Core master branch, pulled in by [#34804](https://github.com/bitcoin/bitcoin/pull/34804). Also pulled into Bitcoin Core 31.x stable branch by [#34952](https://github.com/bitcoin/bitcoin/pull/34952).
19+
1320
## [v8.0](https://github.com/bitcoin-core/libmultiprocess/commits/v8.0)
1421
- Better support for non-libmultiprocess IPC clients: avoiding errors on unclean disconnects, and allowing simultaneous requests to worker threads which previously triggered "thread busy" errors.
15-
- Used in Bitcoin Core, pulled in by [#34422](https://github.com/bitcoin/bitcoin/pull/34422).
22+
- Intermediate version used in Bitcoin Core master branch between 30.x and 31.x branches, pulled in by [#34422](https://github.com/bitcoin/bitcoin/pull/34422).
1623

1724
## [v7.0](https://github.com/bitcoin-core/libmultiprocess/commits/v7.0)
1825
- Adds SpawnProcess race fix, cmake `target_capnp_sources` option, ci and documentation improvements. Adds `version.h` header declaring major and minor version numbers.
19-
- Used in Bitcoin Core, pulled in by [#34363](https://github.com/bitcoin/bitcoin/pull/34363).
26+
- Intermediate version used in Bitcoin Core master branch between 30.x and 31.x branches, pulled in by [#34363](https://github.com/bitcoin/bitcoin/pull/34363).
2027

2128
## [v7.0-pre2](https://github.com/bitcoin-core/libmultiprocess/commits/v7.0-pre2)
2229
- Fixes intermittent mptest hang and makes other minor improvements.
2330
- Used in Bitcoin Core 30.1 and 30.2 releases and 30.x branch, pulled in by [#33518](https://github.com/bitcoin/bitcoin/pull/33518) and [#33519](https://github.com/bitcoin/bitcoin/pull/33519).
2431

2532
## [v7.0-pre1](https://github.com/bitcoin-core/libmultiprocess/commits/v7.0-pre1)
26-
2733
- Adds support for log levels to reduce logging and "thread busy" error to avoid a crash on misuse.
28-
- Minimum required version for Bitcoin Core 30.1 and 30.2 releases and 30.x branch, pulled in by [#33412](https://github.com/bitcoin/bitcoin/pull/33412), [#33518](https://github.com/bitcoin/bitcoin/pull/33518), and [#33519](https://github.com/bitcoin/bitcoin/pull/33519).
34+
- Minimum required version since Bitcoin Core 30.1, pulled in by [#33412](https://github.com/bitcoin/bitcoin/pull/33412), [#33518](https://github.com/bitcoin/bitcoin/pull/33518), and [#33519](https://github.com/bitcoin/bitcoin/pull/33519).
2935

3036
## [v6.0](https://github.com/bitcoin-core/libmultiprocess/commits/v6.0)
31-
3237
- Adds CI scripts and build and test fixes.
3338
- Used in Bitcoin Core 30.0 release, pulled in by [#32345](https://github.com/bitcoin/bitcoin/pull/32345), [#33241](https://github.com/bitcoin/bitcoin/pull/33241), and [#33322](https://github.com/bitcoin/bitcoin/pull/33322).
3439

3540
## [v6.0-pre1](https://github.com/bitcoin-core/libmultiprocess/commits/v6.0-pre1)
36-
3741
- Adds fixes for unclean shutdowns and thread sanitizer issues.
3842
- Drops `EventLoop::addClient` and `EventLoop::removeClient` methods,
3943
requiring clients to use new `EventLoopRef` class instead.

src/ipc/libmultiprocess/include/mp/type-context.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ auto PassField(Priority<1>, TypeList<>, ServerContext& server_context, const Fn&
189189
}
190190
})) {
191191
MP_LOG(loop, Log::Error) << "IPC server request #" << req << " uncaught exception (" << kj::str(*exception).cStr() << ")";
192-
throw kj::mv(*exception);
192+
kj::throwRecoverableException(kj::mv(*exception));
193193
}
194194
return call_context;
195195
// End of scope: if KJ_DEFER was reached, it runs here

src/ipc/libmultiprocess/include/mp/version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
//! pointing at the prior merge commit. The /doc/versions.md file should also be
2525
//! updated, noting any significant or incompatible changes made since the
2626
//! previous version.
27-
#define MP_MAJOR_VERSION 9
27+
#define MP_MAJOR_VERSION 10
2828

2929
//! Minor version number. Should be incremented in stable branches after
3030
//! backporting changes. The /doc/versions.md file should also be updated to

src/ipc/libmultiprocess/test/mp/test/spawn_tests.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
namespace {
2222

23+
constexpr auto FAILURE_TIMEOUT = std::chrono::seconds{30};
24+
2325
// Poll for child process exit using waitpid(..., WNOHANG) until the child exits
2426
// or timeout expires. Returns true if the child exited and status_out was set.
2527
// Returns false on timeout or error.
@@ -94,9 +96,9 @@ KJ_TEST("SpawnProcess does not run callback in child")
9496
::close(fd);
9597

9698
int status{0};
97-
// Give the child up to 1 second to exit. If it does not, terminate it and
99+
// Give the child some time to exit. If it does not, terminate it and
98100
// reap it to avoid leaving a zombie behind.
99-
const bool exited{WaitPidWithTimeout(pid, std::chrono::milliseconds{1000}, status)};
101+
const bool exited{WaitPidWithTimeout(pid, FAILURE_TIMEOUT, status)};
100102
if (!exited) {
101103
::kill(pid, SIGKILL);
102104
::waitpid(pid, &status, /*options=*/0);

0 commit comments

Comments
 (0)