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