From 99d968bc674c0d836f4b8551d27f9e3729e25ffe Mon Sep 17 00:00:00 2001 From: boyce Date: Tue, 15 Dec 2020 18:02:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=9A=E6=97=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpc/client.go | 13 ++++++------- util/timer/heap.go | 11 +++++++++++ util/timer/timer.go | 5 +++++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/rpc/client.go b/rpc/client.go index e302ab1..9ba73fb 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -5,7 +5,7 @@ import ( "fmt" "github.com/duanhf2012/origin/log" "github.com/duanhf2012/origin/network" - "github.com/duanhf2012/origin/util/timewheel" + "github.com/duanhf2012/origin/util/timer" "math" "reflect" "runtime" @@ -62,18 +62,17 @@ func (client *Client) Connect(id int,addr string) error { } func (client *Client) startCheckRpcCallTimer(){ - timer:=timewheel.NewTimer(3*time.Second) + t:=timer.NewTimer(3*time.Second) for{ select { - case <- timer.C: - timewheel.ReleaseTimer(timer) - timer=timewheel.NewTimer(3*time.Second) + case timer:=<- t.C: + timer.SetupTimer(time.Now()) client.checkRpcCallTimeout() } } - timer.Close() - timewheel.ReleaseTimer(timer) + t.Cancel() + timer.ReleaseTimer(t) } func (client *Client) makeCallFail(call *Call){ diff --git a/util/timer/heap.go b/util/timer/heap.go index f315762..05ada2a 100644 --- a/util/timer/heap.go +++ b/util/timer/heap.go @@ -14,6 +14,17 @@ func SetupTimer(timer *Timer) *Timer{ return timer } +func NewTimer(d time.Duration) *Timer{ + c := make(chan *Timer,1) + timer := newTimer(d,c,nil,"",nil) + SetupTimer(timer) + return timer +} + +func ReleaseTimer(timer *Timer) { + releaseTimer(timer) +} + type _TimerHeap struct { timers []*Timer } diff --git a/util/timer/timer.go b/util/timer/timer.go index 2ab3b6c..fc25d1f 100644 --- a/util/timer/timer.go +++ b/util/timer/timer.go @@ -89,6 +89,11 @@ func (t *Timer) Do(){ } } +func (t *Timer) SetupTimer(now time.Time){ + t.fireTime = now.Add(t.interval) + SetupTimer(t) +} + func (t *Timer) GetInterval() time.Duration{ return t.interval }