• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dangernoodle-io / pogopin / 29071271014
88%

Build:
DEFAULT BRANCH: main
Ran 10 Jul 2026 05:26AM UTC
Jobs 1
Files 28
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Jul 2026 05:24AM UTC coverage: 83.451% (+1.0%) from 82.429%
29071271014

push

github

web-flow
fix: eliminate internal/session deferred-restart timer test flake (BR-63) (#44)

- waitForPortInterval/deferredRestartTimeout/syncRetryDelay are now
  atomic-backed instead of plain package vars, closing a genuine `-race`
  data race between a leaked expireSession goroutine (a fired
  time.AfterFunc callback that Stop() can no longer cancel) and a later
  test's injected value.
- PortSession.timerDone tracks each ReleaseFlasherDeferred callback so
  stopSessionTimerLocked/WaitForExpireSessions can deterministically wait
  for an in-flight callback to finish instead of guessing with a sleep, so
  no leaked goroutine can outlive its test and race the next test's setup.
- fixes two tests (TestReleaseFlasherDeferredStartsTimer,
  TestModeTransitionReaderToFlasherToPendingToReader,
  TestReleaseFlasherDeferred_WritesStatus) that asserted the intermediate
  ModePending state immediately after a fast (ms-scale) deferred timer,
  which itself raced the real timer under heavy parallel load; the
  immediate-state checks now use the real default timeout (no race
  possible), the eventual-fire checks join the new done-channel.
- WaitForExpireSessions now joins via a package-level expireTimers
  registry (independent of ports map membership) instead of scanning the
  live ports map: expireSession can delete(ports, port) on its
  failure/never-re-enumerate path before its callback closes timerDone,
  which made that goroutine invisible to a ports-map-scan join and let it
  keep running past a test's return, reintroducing the same race BR-63
  fixed. Covered by a new -race-clean delete-path test.
- stopSessionTimerLocked now nils sess.timerDone after closing it (either
  branch), so a stale (possibly already-closed) channel is never reachable
  off sess between teardown and the next deferred release; safe because
  the callback closure captures its done channel by local variable, not
  via this field.
- adds exported DeferredRestartTimeout() wrapping the internal at... (continued)

3076 of 3686 relevant lines covered (83.45%)

0.95 hits per line

Coverage Regressions

Lines Coverage ∆ File
57
88.5
3.97% session/session.go
9
50.79
27.58% session/testing.go
Jobs
ID Job ID Ran Files Coverage
1 29071271014.1 10 Jul 2026 05:26AM UTC 28
83.45
GitHub Action Run
Source Files on build 29071271014
  • Tree
  • List 28
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #29071271014
  • 5299dfa2 on github
  • Prev Build on main (#28917888710)
  • Next Build on main (#29071566617)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc