Serialize writer submission and shutdown, enqueue explicit stop messages after accepted records, and finish the final file batch before joining. Keep drained process-wide channel storage until exit to avoid the Nim 2.2.10 Channel.close mutex teardown defect. Cover empty records, multiple destinations, joined producers, and concurrent shutdown. Include writer lifecycle sanitizer tests in nimble test and update usage documentation. Validation: all 32 unit tests, eight writer exit scenarios, and writer lifecycle ThreadSanitizer tests pass. The full suite retains the known configuration refresh, timestamp, and default allocator failures.
27 lines
878 B
Bash
27 lines
878 B
Bash
#!/usr/bin/env bash
|
|
set -u
|
|
|
|
binary=${1:?Expected the ThreadSanitizer test executable}
|
|
writer_binary=${2:?Expected the writer lifecycle test executable}
|
|
result=0
|
|
for scenario in independent service service-lifetime service-reconfigure custom-state formatter shared-state-lifetime factory-state collector formatter-lifetime timestamp allocator; do
|
|
echo "ThreadSanitizer scenario: $scenario"
|
|
if TSAN_OPTIONS=halt_on_error=1:exitcode=66 timeout 30s "$binary" "$scenario"; then
|
|
echo "PASS: $scenario"
|
|
else
|
|
code=$?
|
|
echo "FAIL: $scenario (exit $code)" >&2
|
|
result=1
|
|
fi
|
|
done
|
|
|
|
echo "ThreadSanitizer scenario: writer-lifecycle"
|
|
if TSAN_OPTIONS=halt_on_error=1:exitcode=66 timeout 30s "$writer_binary" 'Background writer lifecycle::*'; then
|
|
echo "PASS: writer-lifecycle"
|
|
else
|
|
code=$?
|
|
echo "FAIL: writer-lifecycle (exit $code)" >&2
|
|
result=1
|
|
fi
|
|
exit "$result"
|