Skip to content

Commit 53c4e1c

Browse files
committed
oracle: re-run on NLog to confirm the dispose-helper fix clears 4 timer FPs
Temporary, dev-only: point the push-triggered oracle at NLog/NLog and disable the four direct/alias timer baseline entries that the CallReleasesReceiver fix (6f4818c) should now clear. If they stay out of own-only on the live run, the fix cleared them for real and the entries are deleted; if they resurface, they are restored. TimeoutContinuation stays baselined — its Interlocked.Exchange ref-alias is out of the fix's scope. Reverted after the run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019846YSZ35c7CdkWQ1qX5gm
1 parent 6f4818c commit 53c4e1c

3 files changed

Lines changed: 13 additions & 7 deletions

File tree

‎.github/workflows/oracle.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ on:
4545
push:
4646
branches:
4747
- claude/zen-pasteur-76hfs1
48+
- claude/mos-ownership-summary-n3q3j4
4849
paths:
4950
- corpus/oracle-target.txt
5051

‎corpus/oracle-fp-baseline.txt‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,14 @@
2626
# custom dispose-sink the extractor's intra-Dispose() field scan can't see. Two
2727
# also dispose only in the dispose-pattern override / lifecycle hook (Dispose(bool
2828
# disposing), CloseTarget()), neither of which the field scan visits.
29-
NLog/NLog | TimeoutContinuation.cs | OWN001 | _timeoutTimer | disposed via Dispose() -> StopTimer() -> Timer.WaitForDispose(); interprocedural custom dispose-sink not traced
30-
NLog/NLog | AsyncTaskTarget.cs | OWN001 | _taskTimeoutTimer | disposed in Dispose(bool disposing) via Timer.WaitForDispose(); dispose-pattern override + custom sink not traced
31-
NLog/NLog | AsyncTaskTarget.cs | OWN001 | _lazyWriterTimer | disposed in Dispose(bool disposing) via Timer.WaitForDispose(); dispose-pattern override + custom sink not traced
32-
NLog/NLog | AsyncTargetWrapper.cs | OWN001 | _lazyWriterTimer | disposed in CloseTarget() -> StopLazyWriterThread() -> Timer.WaitForDispose(); lifecycle hook + custom sink not traced
33-
NLog/NLog | BufferingTargetWrapper.cs | OWN001 | _flushTimer | disposed in CloseTarget() via Timer.WaitForDispose(); lifecycle hook + custom sink not traced
29+
NLog/NLog | TimeoutContinuation.cs | OWN001 | _timeoutTimer | disposed via Dispose() -> StopTimer() -> Timer.WaitForDispose() on the result of Interlocked.Exchange(ref _timeoutTimer, null) — a ref-exchange alias the extractor does not yet track (CallReleasesReceiver clears the direct/simple-alias siblings, not this one)
30+
# [fix-pending experiment] The four entries below are cleared by the CallReleasesReceiver
31+
# extractor fix (commit 6f4818c) — disabled here to confirm on a live NLog oracle run that
32+
# they no longer fire; if confirmed they are deleted, if they resurface they are restored.
33+
# NLog/NLog | AsyncTaskTarget.cs | OWN001 | _taskTimeoutTimer | disposed in Dispose(bool disposing) via Timer.WaitForDispose(); dispose-pattern override + custom sink not traced
34+
# NLog/NLog | AsyncTaskTarget.cs | OWN001 | _lazyWriterTimer | disposed in Dispose(bool disposing) via Timer.WaitForDispose(); dispose-pattern override + custom sink not traced
35+
# NLog/NLog | AsyncTargetWrapper.cs | OWN001 | _lazyWriterTimer | disposed in CloseTarget() -> StopLazyWriterThread() -> Timer.WaitForDispose(); lifecycle hook + custom sink not traced
36+
# NLog/NLog | BufferingTargetWrapper.cs | OWN001 | _flushTimer | disposed in CloseTarget() via Timer.WaitForDispose(); lifecycle hook + custom sink not traced
3437

3538
# --- protobuf-net/protobuf-net --------------------------------------------------
3639
protobuf-net/protobuf-net | ProtoWriter.BufferWriter.cs | OWN001 | _nullWriter | intentional null-object kept attached for pooled reuse; Dispose() documents "don't cascade dispose to the null one"

‎corpus/oracle-target.txt‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@
1313
# differentiation, on real cross-tool output rather than the selftest's fixtures.
1414
# Expect: #1 Own.NET-only (now OWN014), #2/#3/#4 dispose leaks in "Agree", 0
1515
# oracle-only.
16-
local:corpus/fixtures/systemevents-console
17-
build=SystemEventsLeak.csproj
16+
# [temporary] pointed at NLog to confirm the CallReleasesReceiver fix clears the 4
17+
# direct/alias timer FPs; restored to the systemevents-console fixture after the run.
18+
NLog/NLog
19+
include_tests=false

0 commit comments

Comments
 (0)