Files
certctl/internal/scheduler
shankar0123 01607f8614 fix: scheduler race — track loop goroutines in WaitGroup
Root cause: WaitForCompletion only waited for work goroutines (wg),
but the 5-6 loop goroutines (renewalCheckLoop, jobProcessorLoop, etc.)
were not tracked. After cancel() + WaitForCompletion(), loop goroutines
could still be alive accessing scheduler/mock fields when the next test
started, triggering the race detector.

Fix:
- Start() now adds loop goroutines to wg, so WaitForCompletion blocks
  until both work items AND loops have fully exited
- Removed untracked 100ms timer goroutine for startedChan — now closed
  immediately after launching loops
- Timeout test updated: uses blockCh (ignores context) instead of
  slowDelay (respects context) so it reliably triggers the timeout path

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 23:31:52 -04:00
..