diff --git a/module.go b/module.go index f2d02327..da01d7f7 100644 --- a/module.go +++ b/module.go @@ -167,7 +167,9 @@ func (m *module[T]) setSignature(signature T) { } func (m *module[T]) EnsureSetFinalizer() { - runtime.SetFinalizer(&m, m.close) + runtime.SetFinalizer(m, func(m *module[T]) { + m.close(m) + }) } func (m *module[T]) Close(_ *module[T]) { diff --git a/pool.go b/pool.go index 9a90650e..2c27ec0e 100644 --- a/pool.go +++ b/pool.go @@ -38,7 +38,11 @@ func newModulePool[T interfaces.Signature](ctx context.Context, template *templa return &modulePool[T]{ maxSize: maxSize, new: func() (*module[T], error) { - return newModule[T](ctx, template) + m, err := newModule[T](ctx, template) + if m != nil { + m.EnsureSetFinalizer() + } + return m, err }, close: func(m *module[T]) { m.Close(m) @@ -84,7 +88,6 @@ func (p *modulePool[T]) Get() (*module[T], error) { if p.maxSize == 0 { m, ok := p.pool.Get().(*module[T]) if ok && m != nil { - m.EnsureSetFinalizer() return m, nil } return p.new()