It states this in the API docs: "The cleanup(arg) call is not always guaranteed to run; in particular it is not guaranteed to run before program exit."
> On Apr 3, 2025, at 10:23 AM, Yaroslav Brustinov <y.brusti...@gmail.com> wrote: > > Hello, experts. > > Given following code as example: > > package main > > import ( > "fmt" > "io" > "runtime" > "sync/atomic" > "time" > ) > > type S struct { > foo int > } > > var released1 atomic.Bool > var released2 atomic.Bool > > func releaseCb(releaseFlag *atomic.Bool) { > fmt.Println("release CB") > releaseFlag.Store(true) > } > > func deferredCheckRelease(goexit bool, releaseFlag *atomic.Bool) { > for range 20 { > runtime.GC() > if releaseFlag.Load() { > fmt.Println("released, cond:", goexit) > return > } > time.Sleep(10 * time.Millisecond) > } > fmt.Println("not released, cond:", goexit) > } > > func f(goexit bool, releaseFlag *atomic.Bool) { > defer deferredCheckRelease(goexit, releaseFlag) > s := &S{1} > runtime.AddCleanup(s, releaseCb, releaseFlag) > if goexit { > // releaseFlag will not be set > runtime.Goexit() > } > // releaseFlag will be set > fmt.Fprint(io.Discard, s) > } > > func main() { > go f(true, &released1) > go f(false, &released2) > time.Sleep(time.Second) > } > > As comment inside mentions, release flag is not set if runtime.Goexit() > executed. > > Maybe it's because runtime.AddCleanup is not "guaranteed" to run? > In such case would be great to clarify (in docs?) in which cases it might not > run. > People might rely on the callback... > > > > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > To view this discussion visit > https://groups.google.com/d/msgid/golang-nuts/a0df1e83-2e25-4de2-89b5-25de4e892670n%40googlegroups.com > > <https://groups.google.com/d/msgid/golang-nuts/a0df1e83-2e25-4de2-89b5-25de4e892670n%40googlegroups.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/C35A5540-BABD-4783-A407-FF777659E4B3%40ix.netcom.com.