From 19fd331c4645b8abd4de68d18970c1acac44e860 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Wed, 6 Oct 2021 15:53:03 +0800 Subject: [PATCH] rf(server): use sync.Once --- modules/servers/servers.go | 1 + server/middlewares.go | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/servers/servers.go b/modules/servers/servers.go index 33e77c5..579f21b 100644 --- a/modules/servers/servers.go +++ b/modules/servers/servers.go @@ -1,3 +1,4 @@ +// Package servers provide servers register package servers import ( diff --git a/server/middlewares.go b/server/middlewares.go index 98949c3..6241ca2 100644 --- a/server/middlewares.go +++ b/server/middlewares.go @@ -5,7 +5,6 @@ import ( "context" "os" "sync" - "sync/atomic" "time" "github.com/Mrs4s/go-cqhttp/coolq" @@ -76,7 +75,7 @@ func longPolling(bot *coolq.CQBot, maxSize int) handler { return nil } var ( - ok int32 + once sync.Once ch = make(chan []interface{}, 1) timeout = time.Duration(p.Get("timeout").Int()) * time.Second ) @@ -87,7 +86,7 @@ func longPolling(bot *coolq.CQBot, maxSize int) handler { if queue.Len() == 0 { cond.Wait() } - if atomic.CompareAndSwapInt32(&ok, 0, 1) { + once.Do(func() { limit := int(p.Get("limit").Int()) if limit <= 0 || queue.Len() < limit { limit = queue.Len() @@ -97,12 +96,12 @@ func longPolling(bot *coolq.CQBot, maxSize int) handler { ret[i] = queue.Remove(queue.Front()) } ch <- ret - } + }) }() if timeout != 0 { select { case <-time.After(timeout): - atomic.StoreInt32(&ok, 1) + once.Do(func() {}) return coolq.OK([]interface{}{}) case ret := <-ch: return coolq.OK(ret)