Known issues¶
Defects found in review and benchmarking, with the PR that fixed each. All fifteen are fixed
and have regression tests; the numbers are referenced from code comments and tests
(KNOWN_ISSUES #n). Current overhead figures are in bench/RESULTS.md;
planned work is in ROADMAP.md.
| # | Severity | Area | Problem | Fix |
|---|---|---|---|---|
| 1 | High | correctness | Inter-process counter double-counted when publisher and subscriber shared a process | #4 |
| 2 | Medium | correctness | "Node liveness" was "ever initialized": nodes were never removed | #7 |
| 3 | Medium | efficiency | Unresolvable callbacks (timers, services) took the write lock on every call | #2 |
| 4 | Medium | robustness | Default output file was shared by all processes, so writes interleaved | #6 |
| 5 | Low | robustness | std::stod on a bad env var threw out of a tracepoint and terminated the host |
#5 |
| 6 | Low | docs | Dangling issue reference; the rclcpp#2911 premise needed a distro caveat | #1 |
| 7 | Low | behaviour | Idle topics printed TOPIC /x 0.000000 every window |
#3 |
| 8 | High | correctness | First window reported up to 2x the rate (timer first-fire off by one, nominal instead of measured window length) | #9 |
| 9 | Medium | robustness | Exit-time use after free: tracepoints could run during static destruction | #10 |
| 10 | Medium | robustness | fork() without exec: the child kept counting but never flushed |
#11 |
| 11 | Low | behaviour | Output file was append-only and unbounded while the README said "rolling" | #13 |
| 12 | Medium | behaviour | A stalled subscription emitted no RECV line, so a stall looked like absence |
#12 |
| 13 | Low | efficiency | Thread-local cache was single-entry; the "0.2 ns/op" figure was the all-hits best case | #14 |
| 14 | Low | build | The probe exported every symbol, not just ros_trace_*; lint deps were declared but unused |
#15 |
| 15 | Medium | efficiency | TLS cache hash aliased on allocator strides (about 90 % misses under realistic farms, +2-4 % workload CPU) | #19 |
Sub-items referenced from code: 8a is the timer first-fire off-by-one, 8b is the nominal window denominator (both fixed in #9).