Skip to content

Commit 8deda53

Browse files
committed
feat: accelerate garbage collection
1 parent 3ae091c commit 8deda53

File tree

4 files changed

+17
-73
lines changed

4 files changed

+17
-73
lines changed

go.mod

+1-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,4 @@ module github.com/singchia/yafsm
22

33
go 1.15
44

5-
require (
6-
github.com/singchia/go-hammer v0.0.0-20211110114452-df62bc907676
7-
gonum.org/v1/gonum v0.9.3
8-
)
5+
require github.com/jumboframes/armorigo v0.1.0

go.sum

-66
This file was deleted.

pkg/prioqueue/prioqueue.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,18 @@ func (pq *PrioQueue) Available() int {
7272
}
7373

7474
func (pq *PrioQueue) PrioPush(prio int, data interface{}) error {
75+
pq.mutex.RLock()
76+
if !pq.ok {
77+
pq.mutex.RUnlock()
78+
return errors.New("queue closed")
79+
}
7580
select {
7681
case pq.ch <- struct{}{}:
7782
default:
7883
return errors.New("queue full")
7984
}
8085

8186
queue := (*prioQueue)(nil)
82-
pq.mutex.RLock()
8387
for elem := pq.queues.Front(); elem != nil; elem = elem.Next() {
8488
value, _ := elem.Value.(*prioQueue)
8589
if value.prio == prio {
@@ -203,7 +207,6 @@ func (pq *PrioQueue) PopSync() interface{} {
203207
}
204208
pq.mutex.RUnlock()
205209
}
206-
return nil
207210
}
208211

209212
func (pq *PrioQueue) Close() {

yafsm.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,11 @@ func (fsm *FSM) Close() {
9898
for k, _ := range fsm.states {
9999
delete(fsm.states, k)
100100
}
101-
for k, _ := range fsm.events {
101+
for k, v := range fsm.events {
102+
for elem := v.Front(); elem != nil; elem = elem.Next() {
103+
event := elem.Value.(*Event)
104+
event.handlers, event.From, event.To = nil, nil, nil
105+
}
102106
delete(fsm.events, k)
103107
}
104108
fsm.pq.Close()
@@ -108,10 +112,16 @@ func (fsm *FSM) emit(ctx context.Context) {
108112
for {
109113
select {
110114
case <-ctx.Done():
115+
fsm.pq = nil
116+
fsm.events = nil
117+
fsm.states = nil
111118
return
112119

113120
default:
114121
data := fsm.pq.PopSync()
122+
if data == nil {
123+
continue
124+
}
115125
switch ec := data.(type) {
116126
case *eventchan:
117127
et := (*Event)(nil)

0 commit comments

Comments
 (0)