| // Copyright (c) 2025 Tethys Plex | |
| // | |
| // This file is part of Veloera. | |
| // | |
| // This program is free software: you can redistribute it and/or modify | |
| // it under the terms of the GNU General Public License as published by | |
| // the Free Software Foundation, either version 3 of the License, or | |
| // (at your option) any later version. | |
| // | |
| // This program is distributed in the hope that it will be useful, | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| // GNU General Public License for more details. | |
| // | |
| // You should have received a copy of the GNU General Public License | |
| // along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| 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{}) { | |
| if stopChan, ok := ctx.Value("stop_chan").(chan bool); ok { | |
| SafeSendBool(stopChan, true) | |
| } | |
| SysError(fmt.Sprintf("panic in gopool.RelayPool: %v", i)) | |
| }) | |
| } | |
| func RelayCtxGo(ctx context.Context, f func()) { | |
| relayGoPool.CtxGo(ctx, f) | |
| } | |