Skip to content

Tags: panjf2000/ants

Tags

v2.12.1

Toggle v2.12.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
patch: v2.12.1 (#398)

* chore: use my referral link of DO

* docs: correct WithNonblocking comment about its returned error (#390)

* fix: make Reboot() wait for pool to fully release before resetting state (#395)

* fix: resolve data race on poolCommon.once field using atomic.Pointer

The data race occurred between Reboot() writing p.once = &sync.Once{}
and worker goroutines reading p.once.Do(...) concurrently.

Fix: change the once field from *sync.Once to atomic.Pointer[sync.Once]
so all reads (Load) and writes (Store) are atomic.

Agent-Logs-Url: https://github.com/panjf2000/ants/sessions/b2f67c6c-ed78-4758-9185-643b3e09d143

Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

* fix: make Reboot() wait for all workers to exit before resetting pool

The root cause of the data race is that Reboot() resets pool state
(once, allDone) while workers are still shutting down and accessing
those same fields.

Fix: Reboot() now waits on the allDone channel (which is closed when
the last worker exits) before resetting pool state. This ensures no
worker goroutine is running when the fields are reassigned, eliminating
the data race without needing atomic wrappers.

Reverts the atomic.Pointer[sync.Once] approach in favor of this
fundamental fix.

Agent-Logs-Url: https://github.com/panjf2000/ants/sessions/7b1d6e25-546a-40ef-b31d-33e824186b31

Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

* fix: also wait for purge/ticktock goroutines to exit in Reboot()

Ensures the old purge and ticktock goroutines have fully exited
(set their done flags) before Reboot() resets those flags and
starts new goroutines. This prevents a logic race where the old
goroutine could set purgeDone/ticktockDone=1 after Reboot() resets
them to 0.

Agent-Logs-Url: https://github.com/panjf2000/ants/sessions/480234c8-a50f-4dc3-9352-0b337ebfc5d3

Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

* chore: improve variable naming in binarySearch (#393)

* fix: release created pools on NewMultiPool failure (#394)

* chore: replace 1<<31-1 with math.MaxInt32 (#392)

* fix: move once.Do(close(allDone)) from Reboot() to Release() (#397)

* fix: use atomic.Pointer for once field to prevent data race in Reboot

The data race occurred between Reboot() writing p.once = &sync.Once{}
and worker goroutines reading p.once to call once.Do(close(allDone)).

By using atomic.Pointer[sync.Once], all reads (Load) and writes (Store)
to the once field are properly synchronized.

Agent-Logs-Url: https://github.com/panjf2000/ants/sessions/4a1d1b13-0a7f-4167-ae12-429e7719ea32

Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

* fix: use sync.WaitGroup to ensure all worker goroutines fully exit before Reboot

Revert the superficial atomic.Pointer fix. The real issue is that
Reboot() proceeded after allDone (running count hit 0) while worker
goroutines were still executing deferred cleanup code.

Add workerWg sync.WaitGroup to poolCommon. Each worker goroutine calls
wg.Add(1) before spawning and defer wg.Done() as the outermost defer
(runs last). Reboot() calls workerWg.Wait() after <-allDone to block
until every goroutine has fully exited before resetting pool state.

Agent-Logs-Url: https://github.com/panjf2000/ants/sessions/758f404a-fab6-4a4e-8f42-ea4fdfd2ab9a

Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

* fix: call workerWg.Add(1) before addRunning(1) for defensive ordering

Agent-Logs-Url: https://github.com/panjf2000/ants/sessions/758f404a-fab6-4a4e-8f42-ea4fdfd2ab9a

Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

* fix: move once.Do(close(allDone)) to Release() instead of Reboot()

This is the fundamental fix: Release() is the proper place to close
allDone when no workers are running, since it's the operation that
transitions the pool to CLOSED state. If workers are still running,
the last one to exit closes allDone in its defer as before.

This eliminates the race between Reboot() and running workers on
once.Do, and removes the unnecessary workerWg complexity.

Agent-Logs-Url: https://github.com/panjf2000/ants/sessions/0d78b737-d4ef-4dbd-b021-3e532757c1f9

Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

---------

Co-authored-by: hehaifeng526 <54569318+vibe-sudo@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: panjf2000 <7496278+panjf2000@users.noreply.github.com>

v2.12.0

Toggle v2.12.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #388 from panjf2000/dev

minor: v2.12.0

v2.11.6

Toggle v2.11.6's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #385 from panjf2000/dev

patch: v2.11.6

v2.11.5

Toggle v2.11.5's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #379 from panjf2000/dev

patch: v2.11.5

v2.11.4

Toggle v2.11.4's commit message
Fix the miscalculated result returned by pool.Free

v2.11.3

Toggle v2.11.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
docs: update the comment on Options.PanicHandler to match its behavior (

#365) (#366)

Fixes #364

v2.11.2

Toggle v2.11.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #361 from panjf2000/dev

patch: v2.11.2

v2.11.1

Toggle v2.11.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #357 from panjf2000/dev

patch: 2.11.1

v2.11.0

Toggle v2.11.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Merge pull request #352 from panjf2000/dev

minor: v2.11.0

v2.10.0

Toggle v2.10.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
minor: v2.10.0 (update) (#335)

minor: v2.10.0 (update)