From 75a8941434bd6f8aa72ccd79b2eba4dedd80d138 Mon Sep 17 00:00:00 2001 From: pangdogs Date: Sat, 18 Feb 2023 02:47:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6tiny=E7=9A=84=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E7=89=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- localevent/event.go | 17 ++++++++++++----- runtime/ectree.go | 2 +- util/container/list.go | 15 ++++++++++----- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/localevent/event.go b/localevent/event.go index 0424461..def7ab1 100644 --- a/localevent/event.go +++ b/localevent/event.go @@ -48,27 +48,34 @@ func (event *Event) Init(autoRecover bool, reportError chan error, eventRecursio } if event.inited { - panic("repeated init event") + panic("event initialized") + } + + if event.inited { + panic("event initialized") } event.autoRecover = autoRecover event.reportError = reportError event.eventRecursion = eventRecursion - event.subscribers.Init(hookCache, gcCollector) event.gcCollector = gcCollector - event.opened = true event.inited = true + + event.Open() } // Open 打开事件 func (event *Event) Open() { + if !event.inited { + panic("event not initialized") + } + event.subscribers.SetGCCollector(event.gcCollector) event.opened = true } // Close 关闭事件 func (event *Event) Close() { - event.subscribers.SetGCCollector(nil) event.Clean() event.opened = false } @@ -82,7 +89,7 @@ func (event *Event) Clean() { } func (event *Event) emit(fun func(delegate util.IfaceCache) bool) { - if fun == nil { + if fun == nil || !event.opened { return } diff --git a/runtime/ectree.go b/runtime/ectree.go index 00e4756..60c82b4 100644 --- a/runtime/ectree.go +++ b/runtime/ectree.go @@ -68,7 +68,7 @@ func (ecTree *ECTree) init(runtimeCtx Context, masterTree bool) { } if ecTree.inited { - panic("repeated init ec-tree") + panic("ec-tree initialized") } ecTree.inited = true diff --git a/util/container/list.go b/util/container/list.go index 2fb31c7..0c6c66f 100644 --- a/util/container/list.go +++ b/util/container/list.go @@ -60,6 +60,15 @@ func (e *Element[T]) Escaped() bool { return e.escaped } +func (e *Element[T]) release() { + *e = Element[T]{} +} + +// Released 是否已释放 +func (e *Element[T]) Released() bool { + return e.list == nil +} + type _DefaultCache[T any] struct{} func (*_DefaultCache[T]) Alloc() *Element[T] { @@ -203,11 +212,7 @@ func (l *List[T]) insertValue(value T, at *Element[T]) *Element[T] { func (l *List[T]) remove(e *Element[T]) *Element[T] { e._prev._next = e._next e._next._prev = e._prev - e._next = nil - e._prev = nil - e.list = nil - var zero T - e.Value = zero + e.release() l.cap-- l.gcLen-- return e