From d9829277de3e7dea8b19e1e94af11aa2ade45dfb Mon Sep 17 00:00:00 2001 From: xucong053 Date: Tue, 5 Jul 2022 20:15:42 +0800 Subject: [PATCH] fix: reuse plugin instance if it already initialized --- hrp/plugin.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hrp/plugin.go b/hrp/plugin.go index a2343358..9ab2017e 100644 --- a/hrp/plugin.go +++ b/hrp/plugin.go @@ -27,6 +27,8 @@ const ( const projectInfoFile = "proj.json" // used for ensuring root project +var pluginMap = map[string]funplugin.IPlugin{} // used for reusing plugin instance + func initPlugin(path, venv string, logOn bool) (plugin funplugin.IPlugin, err error) { // plugin file not found if path == "" { @@ -37,6 +39,11 @@ func initPlugin(path, venv string, logOn bool) (plugin funplugin.IPlugin, err er return nil, nil } + // reuse plugin instance if it already initialized + if p, ok := pluginMap[pluginPath]; ok { + return p, nil + } + pluginOptions := []funplugin.Option{funplugin.WithLogOn(logOn)} if strings.HasSuffix(pluginPath, ".py") { @@ -69,6 +76,9 @@ func initPlugin(path, venv string, logOn bool) (plugin funplugin.IPlugin, err er return } + // add plugin instance to plugin map + pluginMap[pluginPath] = plugin + // catch Interrupt and SIGTERM signals to ensure plugin quitted c := make(chan os.Signal) signal.Notify(c, os.Interrupt, syscall.SIGTERM)