Bugs

Every known stability bug in libmultiprocess and Bitcoin Core's IPC code since 2019, one row per root cause. Most are defects in production code; others are bugs in test code or CI and build problems on IPC jobs, and are marked as such. Each row links to a page with what happened, the root cause, the code, the fix, a timeline and credits for everyone who reported or fixed it. Use the filters to narrow by status, symptom, trigger or year, or see the findings for what the set shows as a whole and the method for what counts as a bug.

BugTitleSymptomStatusFirst reportedFixedScope
9Unbounded IPC debug logging made the test harness run out of memoryOut of memoryFixed2019-07-092019-07-15Production code
10Connection deleted twice when its disconnect handler ran after destructionCrashFixed2019-08-062019-08-06Production code
38Node aborts during shutdown if the wallet process has already exitedCrashFixed2020-03-052025-08-18Production code
39Ctrl-C kills the spawned wallet process before the node can shut it downCrashFixed2020-03-052025-08-18Production code
11Multiprocess CI job runs out of memory linking the debug GUI binaryOut of memoryFixed2021-05-242021-05-26CI infrastructure
12GUI aborts at startup after a refactor of node argument setupAssertion failureFixed2021-06-112021-06-11Production code
13GUI address book test aborts after two separately merged PRs combineAssertion failureFixed2021-09-162021-09-16Test code
14Separate GUI process crashes when broadcasting a PSBTCrashFixed2021-11-122021-11-16Production code
15Node aborts when a separate GUI process opens confirmed transaction detailsAssertion failureFixed2022-09-122023-11-13Production code
24IPC shutdown locks a mutex after its event loop was destroyedCrashFixed2024-04-162025-02-10Production code
16Wallet process hangs holding its wallet lock after the node is killedDeadlockOpen, fix under review2024-05-24Production code
17Wallet process hangs and keeps its wallets locked after the node is killedDeadlockFixed2024-05-242024-06-13Production code
18Client crashes after reconnecting because it reuses a remote thread from the old connectionCrashFixed2024-08-072024-08-09Production code
19Closing a connection writes to freed memory and leaks server objectsUndefined behaviorFixed2024-09-262024-10-03Production code
20Server crashes when a client disconnects during a long-running callCrashFixed2024-10-082024-10-16Production code
30Server crashes using a freed connection after a client disconnects mid-callCrashFixed2024-10-162025-06-19Production code
22Spawned node process aborts at shutdown with a "Broken pipe" errorCrashFixed2024-10-242025-01-27Production code
21Client proxy code casts to a derived object before it exists or after it is goneUndefined behaviorFixed2024-11-222025-01-16Production code
23Scripts passed to the node over IPC are decoded in the wrong formatCrashFixed2024-12-022025-01-27Production code
29Client aborts if the connection closes just as it starts a callCrashFixed2024-12-032025-06-19Production code
40Node crashes at shutdown when a client left a notifications handler behindCrashFixed2024-12-162025-08-18Production code
41Node never finishes shutting down while an IPC client stays connectedHangFixed2024-12-162025-08-18Production code
25IPC unit tests abort on 32-bit CI when GCC and clang code are mixed at -O0CrashFixed2025-01-312025-03-13CI infrastructure
27Mining client calls during node startup or early shutdown crash the nodeCrashFixed2025-02-032025-04-14Production code
26Node started with -disablewallet aborts when a GUI with wallets enabled connectsAssertion failureOpen2025-03-27Production code
52Ctrl-C cannot stop the node while a mining client waits for a new tipHangFixed2025-05-012025-11-12Production code
68Windows child processes hang at shutdown because closing a socket dropped queued messagesHangFixed2025-05-022026-07-17Production code
28Server can hang at shutdown if a client connects as the last one leavesHangFixed2025-06-102025-06-19Production code
31Reading IPC fields calls a function through a dangling reference, without visible effectUndefined behaviorFixed2025-06-192025-06-26Production code
36Test fixture starts its thread before the members that thread writesData raceFixed2025-06-262025-07-01Test code
32Destroying a client proxy races with the event loop closing its connectionData raceFixed2025-06-272025-07-01Production code
33Calling a method after disconnect binds a reference to a null connectionUndefined behaviorFixed2025-06-272025-07-01Production code
34Unlocked cleanup state races when a client disconnects as a call returnsData raceFixed2025-06-272025-07-01Production code
35Disconnect test destroys a promise its server thread still needsUndefined behaviorFixed2025-06-282025-07-01Test code
45Server deadlocks when a client disconnects just as a call returnsDeadlockFixed2025-07-012025-09-17Production code
37Double free when a thread exits while its connection is being destroyedCrashOpen, fix under review2025-07-10Production code
43IPC build hangs forever with Cap'n Proto 0.8 in C++20 modeHangFixed2025-08-122025-08-22Build
42Mining client that leaves block options unset crashes the nodeAssertion failureFixed2025-08-192025-08-21Production code
71IPC code built on NetBSD with GCC before 14 has exception handling compiled outCrashWorked around2025-08-232026-08-03Build
47Node aborts when a client sends overlapping calls to one server threadAssertion failureFixed2025-09-052025-10-02Production code
57Node terminates when a call on a worker thread throws, e.g. on bad inputCrashFixed2025-09-082026-02-20Production code
44Node aborts at shutdown while an IPC mining call is still runningAssertion failureOpen, fix under review2025-09-14Production code
46Python IPC test aborts when libmultiprocess is also installed system-wideCrashFixed2025-09-172025-09-18Test code
8Node aborts when freeing a callback object from a client that disconnectedCrashFixed2025-09-292026-06-02Production code
49Test log callback writes to std::cout from several threads unlockedData raceFixed2025-10-022025-10-07Test code
50Thread-busy test copies capabilities off the event loop threadData raceFixed2025-10-022025-10-07Test code
51Thread-busy test checks an error message no standard library producesWrong resultFixed2025-10-022025-10-07Test code
4832-bit x86 IPC server crashes while logging an exception thrown by a server methodCrashOpen2025-10-03Production code
3Node crashes when a disconnected client's call returns a new objectCrashFixed2025-10-062026-02-20Production code
53Node accepts its own invalid block when a mining client omits the witness commitmentWrong resultFixed2025-10-302025-11-12Production code
54IPC functional test checks a second node before the block reaches itAssertion failureFixed2025-11-152025-11-20Test code
55Node memory grows while Stratum v2 mining clients are connectedMemory leakOpen2025-11-24Production code
58Mining client connecting during node startup crashes the nodeAssertion failureFixed2025-12-022026-02-27Production code
65Unit test hangs on a missed wakeup when three calls share one threadHangFixed2025-12-052026-06-11Test code
2Spawned child process can deadlock before it starts runningDeadlockFixed2026-01-012026-01-13Production code
67Code generator's child process could deadlock if starting the compiler failedDeadlockFixed2026-01-082026-07-17Build
1Process spawning leaks a socket if closing the child's end failsFile descriptor leakFixed2026-01-092026-01-13Production code
56Mining RPCs report an internal bug, or abort, if the node shuts down mid-callAssertion failureOpen, fix under review2026-01-12Production code
4Cancellation flag is written unlocked because its lock was a temporaryData raceFixed2026-02-242026-02-25Production code
7Server crashes when a client drops a new worker thread right awayCrashFixed2026-03-022026-03-27Production code
5Server reads freed request parameters when a client disconnects right after callingCrashFixed2026-03-092026-03-27Production code
6Cancel callback writes to a finished call's stack after a disconnectUndefined behaviorFixed2026-03-102026-03-27Production code
59Mining IPC test times out on slow CI because its waits ignore the timeout factorTimeoutFixed2026-03-122026-03-24Test code
85Disconnect test fails when the server thread starts lateTimeoutOpen2026-03-12Test code
63Thread waits forever when a function it posted to the event loop throwsDeadlockFixed2026-03-192026-04-14Production code
61CI jobs killed when too many slow IPC tests ran at onceCrashFixed2026-03-252026-03-26CI infrastructure
62Spawn test fails on slow CI runners that miss a one-second exit deadlineTimeoutFixed2026-04-012026-04-03Test code
89On Windows, a thread exiting after IPC calls can deadlock the processDeadlockOpen, fix under review2026-04-20Production code
90Chain IPC calls with an unset transaction would crash the nodeCrashOpen, fix under review2026-05-20Production code
64Data race on a proxy's connection pointer when a peer disconnectsData raceFixed2026-06-032026-06-11Production code
66Sending an empty byte string over IPC is undefined behaviorUndefined behaviorFixed2026-07-012026-07-13Production code
72Client can use freed memory if the server closes the socket right awayCrashFixed2026-07-102026-08-11Production code
73Event loop never exits if a client's setup call fails while it is createdHangFixed2026-07-132026-08-11Production code
80macOS IPC listener stops accepting connections after a queued client disconnectsservice-lossFixed2026-07-172026-09-09Production code
69Spawned process's socket could leak into another child started at the same momentFile descriptor leakFixed2026-07-202026-07-30Production code
70Example program crashes at startup when its event loop exits too earlyCrashFixed2026-07-222026-07-30Example code
76Windows IPC processes corrupt the heap at thread exit with older mingw-w64CrashFixed2026-07-222026-08-20Production code
86Client thread hangs forever if building a request throwsHangOpen2026-08-07Production code
87Spawned processes can inherit one stray file descriptorFile descriptor leakOpen2026-08-07Production code
91Signal during spawned-process cleanup can terminate the parentCrashOpen2026-08-07Production code
74Connect test fails on slow machines by expecting one of two valid errorsAssertion failureFixed2026-08-122026-08-13Test code
81Node crashes when a client calls a method on an object it already destroyedCrashOpen2026-08-13Production code
82Destroying an object during a running call frees it under the callData raceOpen2026-08-13Production code
75Node spawned by the GUI never exits after shutdown because disconnected callbacks stay aliveHangOpen, fix under review2026-08-14Production code
79Node can crash when a client dies while a call's reply is being builtData raceFixed2026-08-192026-08-26Production code
77Disconnect handler can still run after its connection was destroyed locallyCrashOpen, fix under review2026-08-20Production code
78Listener at its connection limit stops accepting after a local disconnectservice-lossOpen, fix under review2026-08-20Production code
83Reading a block template while submitting a solution for it is a data raceData raceOpen, fix under review2026-09-06Production code
92Chain.getBlockHash with a height above the tip aborts the nodeAssertion failureOpen, fix under review2026-09-09Production code
84Negative or NaN wait timeout from a mining client aborts debug builds of the nodeAssertion failureOpen2026-09-18Production code
93IPC processes abort when the monotonic clock steps backwards, with Cap'n Proto older than 1.2CrashOpen, fix under review2026-09-25Production code
94checkBlock before genesis is connected aborts the nodeAssertion failureOpen2026-09-26Production code
95Concurrent first IPC use can abort the processCrashOpen2026-09-27Production code
96Failed startup does not exit while a mining client is waitingHangOpen2026-09-27Production code
97Failed IPC startup leaks the socket descriptor and the spawned childFile descriptor leakOpen2026-09-27Production code
98Process aborts instead of reporting an error when the IPC event loop fails to startCrashOpen2026-09-27Production code
99One mining interrupt can leave a second wait blockedHangOpen2026-09-27Production code
100IPC process aborts if its cleanup thread cannot be startedCrashOpen2026-09-27Production code
101Failed IPC socket setup is ignored: client crashes, listener silently missingCrashOpen2026-09-27Production code
102Process aborts when two thread proxies post to one thread at onceAssertion failureOpen2026-09-28Production code
103An IPC client's notification handler returning an error aborts the nodeCrashOpen, fix under review2026-10-06Production code
88IPC listener stops for good after one temporary accept failureservice-lossOpen2026-10-15Production code