fix #1549: avoid duplicate creating plugins

This commit is contained in:
lilong.129
2023-04-18 21:04:38 +08:00
parent 7d7784d65a
commit 53116be354

View File

@@ -29,9 +29,33 @@ const (
const projectInfoFile = "proj.json" // used for ensuring root project
var pluginMap = sync.Map{} // used for reusing plugin instance
var (
pluginMap sync.Map // used for reusing plugin instance
pluginMutex sync.Mutex
)
func initPlugin(path, venv string, logOn bool) (plugin funplugin.IPlugin, err error) {
func initPlugin(path, venv string, logOn bool) (funplugin.IPlugin, error) {
if plugin, ok := pluginMap.Load(path); ok {
return plugin.(funplugin.IPlugin), nil
}
pluginMutex.Lock()
defer pluginMutex.Unlock()
if plugin, ok := pluginMap.Load(path); ok {
return plugin.(funplugin.IPlugin), nil
}
p, err := initplugin(path, venv, logOn)
if err != nil {
return nil, errors.Wrap(err, "init plugin failed")
}
pluginMap.Store(path, p)
return p, nil
}
func initplugin(path, venv string, logOn bool) (plugin funplugin.IPlugin, err error) {
// plugin file not found
if path == "" {
return nil, nil