From 54dfcb8da5af779453051ab2f9657115083eb57d Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期三, 15 一月 2020 15:05:00 +0800 Subject: [PATCH] debug --- run.go | 46 ++--------------------- common/reboot.go | 64 ++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 42 deletions(-) diff --git a/common/reboot.go b/common/reboot.go new file mode 100644 index 0000000..1e381a8 --- /dev/null +++ b/common/reboot.go @@ -0,0 +1,64 @@ +package common + +import ( + "context" + "os" + "sync" + "time" +) + +const maxTryBeforeReboot = 10 + +// Disturber stop +type Disturber struct { + mtx sync.Mutex + live bool + until int +} + +// NewDisturber new +func NewDisturber() *Disturber { + return &Disturber{ + live: true, + until: 0, + } +} + +// Prevent prevent +func (d *Disturber) Prevent() { + d.mtx.Lock() + defer d.mtx.Unlock() + d.live = true +} + +// MaybeReboot reboot +func (d *Disturber) MaybeReboot(ctx context.Context, fn func(...interface{})) { + d.live = true + for { + select { + case <-ctx.Done(): + return + default: + d.mtx.Lock() + running := d.live + d.mtx.Unlock() + + if running { + d.until = 0 + + d.mtx.Lock() + d.live = false + d.mtx.Unlock() + + } else { + d.until++ + fn("Face No Running: ", d.until) + if d.until > maxTryBeforeReboot { + fn("Face Too Long Running, Reboot") + os.Exit(0) + } + } + time.Sleep(time.Second) + } + } +} diff --git a/run.go b/run.go index 30256d6..aae6a86 100644 --- a/run.go +++ b/run.go @@ -2,7 +2,6 @@ import ( "context" - "os" "sync" "time" "unsafe" @@ -13,8 +12,6 @@ "basic.com/valib/gogpu.git" "github.com/gogo/protobuf/proto" ) - -const maxTryBeforeReboot = 10 type face struct { handle *SDKFace @@ -34,39 +31,7 @@ ruleMsgMaxCacheSize int reserved map[string]interface{} - running bool - rebootUntil int - mtxRunning sync.Mutex -} - -func (f *face) maybeReboot(ctx context.Context) { - for { - select { - case <-ctx.Done(): - return - default: - f.mtxRunning.Lock() - running := f.running - f.mtxRunning.Unlock() - - if running { - f.rebootUntil = 0 - - f.mtxRunning.Lock() - f.running = false - f.mtxRunning.Unlock() - - } else { - f.rebootUntil++ - f.fnLogger("Face No Running: ", f.rebootUntil) - if f.rebootUntil > maxTryBeforeReboot { - f.fnLogger("Face Too Long Running, Reboot") - os.Exit(0) - } - } - time.Sleep(time.Second) - } - } + stopper *common.Disturber } // Create create sdk @@ -153,8 +118,7 @@ ruleMsgMaxCacheSize: ruleMaxSize, reserved: reserved, - running: true, - rebootUntil: maxTryBeforeReboot, + stopper: common.NewDisturber(), } } @@ -189,7 +153,7 @@ go s.run(ctx, chRcv, chSnd) - go s.maybeReboot(ctx) + go s.stopper.MaybeReboot(ctx, s.fnLogger) } ////////////////////////////////////////////////////////////////// @@ -352,9 +316,7 @@ // f.fnLogger("Face~~~EjectResult", dtchn) common.EjectResult(data, rMsg, out) // f.fnLogger("Face~~~EjectResult Over", dtchn) - f.mtxRunning.Lock() - f.running = true - f.mtxRunning.Unlock() + f.stopper.Prevent() var id, name string if rMsg.Msg.Tasklab != nil { -- Gitblit v1.8.0