From e70ad2c4c687e984698a4df41b316437dd33f7cf Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Tue, 18 Apr 2023 21:43:30 +0800 Subject: [PATCH] fix #1549: avoid duplicate creating plugins --- hrp/pkg/convert/from_curl_test.go | 2 +- hrp/plugin.go | 28 +++++----------------------- 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/hrp/pkg/convert/from_curl_test.go b/hrp/pkg/convert/from_curl_test.go index 63c036a5..a9b5f4f2 100644 --- a/hrp/pkg/convert/from_curl_test.go +++ b/hrp/pkg/convert/from_curl_test.go @@ -24,7 +24,7 @@ func TestLoadCurlCase(t *testing.T) { if !assert.EqualValues(t, "GET", tCase.TestSteps[0].Request.Method) { t.Fatal() } - if !assert.Equal(t, "https://httpbin.org", tCase.TestSteps[0].Request.URL) { + if !assert.Equal(t, "http://httpbin.org", tCase.TestSteps[0].Request.URL) { t.Fatal() } diff --git a/hrp/plugin.go b/hrp/plugin.go index d12d1777..a23c7dd2 100644 --- a/hrp/plugin.go +++ b/hrp/plugin.go @@ -31,31 +31,10 @@ const projectInfoFile = "proj.json" // used for ensuring root project var ( pluginMap sync.Map // used for reusing plugin instance - pluginMutex sync.Mutex + pluginMutex sync.RWMutex ) -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) { +func initPlugin(path, venv string, logOn bool) (plugin funplugin.IPlugin, err error) { // plugin file not found if path == "" { return nil, nil @@ -66,6 +45,9 @@ func initplugin(path, venv string, logOn bool) (plugin funplugin.IPlugin, err er return nil, nil } + pluginMutex.Lock() + defer pluginMutex.Unlock() + // reuse plugin instance if it already initialized if p, ok := pluginMap.Load(pluginPath); ok { return p.(funplugin.IPlugin), nil