Given that the 29.x
branch doesn’t have the changes to accomodate upstream changes in libmultiprocess, anyone who builds and installs libmultiprocess, and then tries to build Core with -DWITH_MULTIPROCESS=ON
, will get a compile failure:
0[ 34%] Building CXX object src/ipc/CMakeFiles/bitcoin_ipc.dir/capnp/protocol.cpp.o
1/bitcoin/src/ipc/capnp/protocol.cpp: In destructor 'virtual ipc::capnp::{anonymous}::CapnpProtocol::~CapnpProtocol()':
2/bitcoin/src/ipc/capnp/protocol.cpp:45:62: error: no matching function for call to 'std::unique_lock<std::mutex>::unique_lock(mp::Mutex&)'
3 45 | std::unique_lock<std::mutex> lock(m_loop->m_mutex);
4 | ^
5In file included from /usr/include/c++/13/mutex:46,
6 from /bitcoin/src/threadsafety.h:9,
7 from /bitcoin/src/logging.h:10,
8 from /bitcoin/src/interfaces/node.h:10,
9 from /bitcoin/src/interfaces/init.h:11,
10 from /bitcoin/src/ipc/capnp/protocol.cpp:5:
11/usr/include/c++/13/bits/unique_lock.h:68:16: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&) [with _Mutex = std::mutex; mutex_type = std::mutex]'
12 68 | explicit unique_lock(mutex_type& __m)
13 | ^~~~~~~~~~~
14/usr/include/c++/13/bits/unique_lock.h:68:40: note: no known conversion for argument 1 from 'mp::Mutex' to 'std::unique_lock<std::mutex>::mutex_type&' {aka 'std::mutex&'}
15 68 | explicit unique_lock(mutex_type& __m)
16 | ~~~~~~~~~~~~^~~
17/usr/include/c++/13/bits/unique_lock.h:97:9: note: candidate: 'template<class _Rep, class _Period> std::unique_lock<_Mutex>::unique_lock(mutex_type&, const std::chrono::duration<_Rep, _Period>&) [with _Period = _Rep; _Mutex = std::mutex]'
18 97 | unique_lock(mutex_type& __m,
19 | ^~~~~~~~~~~
20/usr/include/c++/13/bits/unique_lock.h:97:9: note: template argument deduction/substitution failed:
21/bitcoin/src/ipc/capnp/protocol.cpp:45:62: note: candidate expects 2 arguments, 1 provided
22 45 | std::unique_lock<std::mutex> lock(m_loop->m_mutex);
23 | ^
24/usr/include/c++/13/bits/unique_lock.h:90:9: note: candidate: 'template<class _Clock, class _Duration> std::unique_lock<_Mutex>::unique_lock(mutex_type&, const std::chrono::time_point<_Clock, _Duration>&) [with _Duration = _Clock; _Mutex = std::mutex]'
25 90 | unique_lock(mutex_type& __m,
26 | ^~~~~~~~~~~
27/usr/include/c++/13/bits/unique_lock.h:90:9: note: template argument deduction/substitution failed:
28/bitcoin/src/ipc/capnp/protocol.cpp:45:62: note: candidate expects 2 arguments, 1 provided
29 45 | std::unique_lock<std::mutex> lock(m_loop->m_mutex);
30 | ^
31/usr/include/c++/13/bits/unique_lock.h:112:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(std::unique_lock<_Mutex>&&) [with _Mutex = std::mutex]'
32 112 | unique_lock(unique_lock&& __u) noexcept
33 | ^~~~~~~~~~~
34/usr/include/c++/13/bits/unique_lock.h:112:33: note: no known conversion for argument 1 from 'mp::Mutex' to 'std::unique_lock<std::mutex>&&'
35 112 | unique_lock(unique_lock&& __u) noexcept
36 | ~~~~~~~~~~~~~~^~~
37/usr/include/c++/13/bits/unique_lock.h:83:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&, std::adopt_lock_t) [with _Mutex = std::mutex; mutex_type = std::mutex]'
38 83 | unique_lock(mutex_type& __m, adopt_lock_t) noexcept
39 | ^~~~~~~~~~~
40/usr/include/c++/13/bits/unique_lock.h:83:7: note: candidate expects 2 arguments, 1 provided
41/usr/include/c++/13/bits/unique_lock.h:79:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&, std::try_to_lock_t) [with _Mutex = std::mutex; mutex_type = std::mutex]'
42 79 | unique_lock(mutex_type& __m, try_to_lock_t)
43 | ^~~~~~~~~~~
44/usr/include/c++/13/bits/unique_lock.h:79:7: note: candidate expects 2 arguments, 1 provided
45/usr/include/c++/13/bits/unique_lock.h:75:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&, std::defer_lock_t) [with _Mutex = std::mutex; mutex_type = std::mutex]'
46 75 | unique_lock(mutex_type& __m, defer_lock_t) noexcept
47 | ^~~~~~~~~~~
48/usr/include/c++/13/bits/unique_lock.h:75:7: note: candidate expects 2 arguments, 1 provided
49/usr/include/c++/13/bits/unique_lock.h:64:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock() [with _Mutex = std::mutex]'
50 64 | unique_lock() noexcept
51 | ^~~~~~~~~~~
52/usr/include/c++/13/bits/unique_lock.h:64:7: note: candidate expects 0 arguments, 1 provided
53/bitcoin/src/ipc/capnp/protocol.cpp:46:21: error: 'class mp::EventLoop' has no member named 'removeClient'
54 46 | m_loop->removeClient(lock);
55 | ^~~~~~~~~~~~
56/bitcoin/src/ipc/capnp/protocol.cpp: In lambda function:
57/bitcoin/src/ipc/capnp/protocol.cpp:87:66: error: no matching function for call to 'std::unique_lock<std::mutex>::unique_lock(mp::Mutex&)'
58 87 | std::unique_lock<std::mutex> lock(m_loop->m_mutex);
59 | ^
60/usr/include/c++/13/bits/unique_lock.h:68:16: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&) [with _Mutex = std::mutex; mutex_type = std::mutex]'
61 68 | explicit unique_lock(mutex_type& __m)
62 | ^~~~~~~~~~~
63/usr/include/c++/13/bits/unique_lock.h:68:40: note: no known conversion for argument 1 from 'mp::Mutex' to 'std::unique_lock<std::mutex>::mutex_type&' {aka 'std::mutex&'}
64 68 | explicit unique_lock(mutex_type& __m)
65 | ~~~~~~~~~~~~^~~
66/usr/include/c++/13/bits/unique_lock.h:97:9: note: candidate: 'template<class _Rep, class _Period> std::unique_lock<_Mutex>::unique_lock(mutex_type&, const std::chrono::duration<_Rep, _Period>&) [with _Period = _Rep; _Mutex = std::mutex]'
67 97 | unique_lock(mutex_type& __m,
68 | ^~~~~~~~~~~
69/usr/include/c++/13/bits/unique_lock.h:97:9: note: template argument deduction/substitution failed:
70/bitcoin/src/ipc/capnp/protocol.cpp:87:66: note: candidate expects 2 arguments, 1 provided
71 87 | std::unique_lock<std::mutex> lock(m_loop->m_mutex);
72 | ^
73/usr/include/c++/13/bits/unique_lock.h:90:9: note: candidate: 'template<class _Clock, class _Duration> std::unique_lock<_Mutex>::unique_lock(mutex_type&, const std::chrono::time_point<_Clock, _Duration>&) [with _Duration = _Clock; _Mutex = std::mutex]'
74 90 | unique_lock(mutex_type& __m,
75 | ^~~~~~~~~~~
76/usr/include/c++/13/bits/unique_lock.h:90:9: note: template argument deduction/substitution failed:
77/bitcoin/src/ipc/capnp/protocol.cpp:87:66: note: candidate expects 2 arguments, 1 provided
78 87 | std::unique_lock<std::mutex> lock(m_loop->m_mutex);
79 | ^
80/usr/include/c++/13/bits/unique_lock.h:112:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(std::unique_lock<_Mutex>&&) [with _Mutex = std::mutex]'
81 112 | unique_lock(unique_lock&& __u) noexcept
82 | ^~~~~~~~~~~
83/usr/include/c++/13/bits/unique_lock.h:112:33: note: no known conversion for argument 1 from 'mp::Mutex' to 'std::unique_lock<std::mutex>&&'
84 112 | unique_lock(unique_lock&& __u) noexcept
85 | ~~~~~~~~~~~~~~^~~
86/usr/include/c++/13/bits/unique_lock.h:83:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&, std::adopt_lock_t) [with _Mutex = std::mutex; mutex_type = std::mutex]'
87 83 | unique_lock(mutex_type& __m, adopt_lock_t) noexcept
88 | ^~~~~~~~~~~
89/usr/include/c++/13/bits/unique_lock.h:83:7: note: candidate expects 2 arguments, 1 provided
90/usr/include/c++/13/bits/unique_lock.h:79:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&, std::try_to_lock_t) [with _Mutex = std::mutex; mutex_type = std::mutex]'
91 79 | unique_lock(mutex_type& __m, try_to_lock_t)
92 | ^~~~~~~~~~~
93/usr/include/c++/13/bits/unique_lock.h:79:7: note: candidate expects 2 arguments, 1 provided
94/usr/include/c++/13/bits/unique_lock.h:75:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock(mutex_type&, std::defer_lock_t) [with _Mutex = std::mutex; mutex_type = std::mutex]'
95 75 | unique_lock(mutex_type& __m, defer_lock_t) noexcept
96 | ^~~~~~~~~~~
97/usr/include/c++/13/bits/unique_lock.h:75:7: note: candidate expects 2 arguments, 1 provided
98/usr/include/c++/13/bits/unique_lock.h:64:7: note: candidate: 'std::unique_lock<_Mutex>::unique_lock() [with _Mutex = std::mutex]'
99 64 | unique_lock() noexcept
100 | ^~~~~~~~~~~
101/usr/include/c++/13/bits/unique_lock.h:64:7: note: candidate expects 0 arguments, 1 provided
102/bitcoin/src/ipc/capnp/protocol.cpp:88:25: error: 'class mp::EventLoop' has no member named 'addClient'
103 88 | m_loop->addClient(lock);
104 | ^~~~~~~~~
105gmake[2]: *** [src/ipc/CMakeFiles/bitcoin_ipc.dir/build.make:178: src/ipc/CMakeFiles/bitcoin_ipc.dir/capnp/protocol.cpp.o] Error 1
106gmake[1]: *** [CMakeFiles/Makefile2:1208: src/ipc/CMakeFiles/bitcoin_ipc.dir/all] Error 2
107gmake: *** [Makefile:146: all] Error 2
Unless we backport a number of ipc related changes to this branch (unlikely), this will be broken for the rest of this branches life. This seems like something we might want to document.