summaryrefslogtreecommitdiffhomepage
path: root/pkg/refs
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/refs')
-rw-r--r--pkg/refs/BUILD15
-rw-r--r--pkg/refs/refcounter.go8
2 files changed, 17 insertions, 6 deletions
diff --git a/pkg/refs/BUILD b/pkg/refs/BUILD
index 3ea877ccf..98150ba8f 100644
--- a/pkg/refs/BUILD
+++ b/pkg/refs/BUILD
@@ -1,16 +1,29 @@
package(licenses = ["notice"]) # Apache 2.0
+load("//tools/go_generics:defs.bzl", "go_template_instance")
load("//tools/go_stateify:defs.bzl", "go_library", "go_test")
+go_template_instance(
+ name = "weak_ref_list",
+ out = "weak_ref_list.go",
+ package = "refs",
+ prefix = "weakRef",
+ template = "//pkg/ilist:generic_list",
+ types = {
+ "Element": "*WeakRef",
+ "Linker": "*WeakRef",
+ },
+)
+
go_library(
name = "refs",
srcs = [
"refcounter.go",
"refcounter_state.go",
+ "weak_ref_list.go",
],
importpath = "gvisor.googlesource.com/gvisor/pkg/refs",
visibility = ["//:sandbox"],
- deps = ["//pkg/ilist"],
)
go_test(
diff --git a/pkg/refs/refcounter.go b/pkg/refs/refcounter.go
index 0d44c2499..638a93bab 100644
--- a/pkg/refs/refcounter.go
+++ b/pkg/refs/refcounter.go
@@ -20,8 +20,6 @@ import (
"reflect"
"sync"
"sync/atomic"
-
- "gvisor.googlesource.com/gvisor/pkg/ilist"
)
// RefCounter is the interface to be implemented by objects that are reference
@@ -61,7 +59,7 @@ type WeakRefUser interface {
//
// +stateify savable
type WeakRef struct {
- ilist.Entry `state:"nosave"`
+ weakRefEntry `state:"nosave"`
// obj is an atomic value that points to the refCounter.
obj atomic.Value `state:".(savedReference)"`
@@ -195,7 +193,7 @@ type AtomicRefCount struct {
mu sync.Mutex `state:"nosave"`
// weakRefs is our collection of weak references.
- weakRefs ilist.List `state:"nosave"`
+ weakRefs weakRefList `state:"nosave"`
}
// ReadRefs returns the current number of references. The returned count is
@@ -276,7 +274,7 @@ func (r *AtomicRefCount) DecRefWithDestructor(destroy func()) {
// return false due to the reference count check.
r.mu.Lock()
for !r.weakRefs.Empty() {
- w := r.weakRefs.Front().(*WeakRef)
+ w := r.weakRefs.Front()
// Capture the callback because w cannot be touched
// after it's zapped -- the owner is free it reuse it
// after that.