From 4598bc977e8ca8b9133b12d78525fbe7ab717470 Mon Sep 17 00:00:00 2001 From: Vlad <13818348+walldiss@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:04:55 +0200 Subject: [PATCH] remove finilisier --- share/eds/cache/accessor_cache.go | 32 ++++++++----------------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/share/eds/cache/accessor_cache.go b/share/eds/cache/accessor_cache.go index 3b9fc90024..e7ac043426 100644 --- a/share/eds/cache/accessor_cache.go +++ b/share/eds/cache/accessor_cache.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "io" - "runtime" "sync" "sync/atomic" "time" @@ -238,8 +237,7 @@ func (bc *AccessorCache) EnableMetrics() (CloseMetricsFn, error) { // Close is called type refCloser struct { *accessorWithBlockstore - closed atomic.Bool - removeRef func() + closeFn func() } // newRefCloser creates new refCloser @@ -248,31 +246,17 @@ func newRefCloser(abs *accessorWithBlockstore) (*refCloser, error) { return nil, err } - rf := &refCloser{ + var closeOnce sync.Once + return &refCloser{ accessorWithBlockstore: abs, - removeRef: abs.removeRef, - } - // Set finalizer to ensure that accessor is closed when refCloser is garbage collected. - // We expect that refCloser will be closed explicitly by the caller. If it is not closed, - // we log an error. - runtime.SetFinalizer(rf, func(rf *refCloser) { - if rf.close() { - log.Error("refCloser for accessor was garbage collected before Close was called") - } - }) - return rf, nil -} - -func (c *refCloser) close() bool { - if c.closed.CompareAndSwap(false, true) { - c.removeRef() - return true - } - return false + closeFn: func() { + closeOnce.Do(abs.removeRef) + }, + }, nil } func (c *refCloser) Close() error { - c.close() + c.closeFn() return nil }