|
|
@@ -0,0 +1,25 @@
|
|
|
+package common
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "fmt"
|
|
|
+ "github.com/bytedance/gopkg/util/gopool"
|
|
|
+ "math"
|
|
|
+)
|
|
|
+
|
|
|
+var relayGoPool gopool.Pool
|
|
|
+
|
|
|
+func init() {
|
|
|
+ relayGoPool = gopool.NewPool("gopool.RelayPool", math.MaxInt32, gopool.NewConfig())
|
|
|
+ relayGoPool.SetPanicHandler(func(ctx context.Context, i interface{}) {
|
|
|
+ //check ctx.Value("stop_chan").(chan bool)
|
|
|
+ if stopChan, ok := ctx.Value("stop_chan").(chan bool); ok {
|
|
|
+ SafeSendBool(stopChan, true)
|
|
|
+ }
|
|
|
+ SysError(fmt.Sprintf("panic in gopool.RelayPool: %v", i))
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+func CtxGo(ctx context.Context, f func()) {
|
|
|
+ relayGoPool.CtxGo(ctx, f)
|
|
|
+}
|