use lock instead of once to create default client (#341)

Signed-off-by: zhangchao <zchao9100@gmail.com>
This commit is contained in:
Taction 2023-04-28 06:34:22 +08:00 committed by GitHub
parent d58007df4d
commit 9d3e975bc9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 10 deletions

View File

@ -51,9 +51,9 @@ const (
var (
logger = log.New(os.Stdout, "", 0)
lock = &sync.Mutex{}
_ Client = (*GRPCClient)(nil)
defaultClient Client
doOnce sync.Once
)
// Client is the interface for Dapr client implementation.
@ -209,16 +209,21 @@ func NewClient() (client Client, err error) {
if port == "" {
port = daprPortDefault
}
var onceErr error
doOnce.Do(func() {
c, err := NewClientWithPort(port)
if err != nil {
onceErr = fmt.Errorf("error creating default client: %w", err)
}
defaultClient = c
})
if defaultClient != nil {
return defaultClient, nil
}
lock.Lock()
defer lock.Unlock()
if defaultClient != nil {
return defaultClient, nil
}
c, err := NewClientWithPort(port)
if err != nil {
return nil, fmt.Errorf("error creating default client: %w", err)
}
defaultClient = c
return defaultClient, onceErr
return defaultClient, nil
}
// NewClientWithPort instantiates Dapr using specific gRPC port.