diff --git a/weed/util/http/http_global_client_init.go b/weed/util/http/http_global_client_init.go index 0dcb05cfd..43fecf1d4 100644 --- a/weed/util/http/http_global_client_init.go +++ b/weed/util/http/http_global_client_init.go @@ -1,27 +1,37 @@ package http import ( + "sync" + "github.com/seaweedfs/seaweedfs/weed/glog" util_http_client "github.com/seaweedfs/seaweedfs/weed/util/http/client" ) var ( - globalHttpClient *util_http_client.HTTPClient + globalHttpClient *util_http_client.HTTPClient + globalHttpClientOnce sync.Once ) func NewGlobalHttpClient(opt ...util_http_client.HttpClientOpt) (*util_http_client.HTTPClient, error) { return util_http_client.NewHttpClient(util_http_client.Client, opt...) } +// GetGlobalHttpClient returns the process-wide HTTP client, initializing it on +// first use. Lazy init keeps callers that bypass weed.go's main (in-process +// test harnesses, libraries) from dereferencing a nil client. func GetGlobalHttpClient() *util_http_client.HTTPClient { + globalHttpClientOnce.Do(initGlobalHttpClient) return globalHttpClient } func InitGlobalHttpClient() { - var err error + globalHttpClientOnce.Do(initGlobalHttpClient) +} - globalHttpClient, err = NewGlobalHttpClient() +func initGlobalHttpClient() { + client, err := NewGlobalHttpClient() if err != nil { glog.Fatalf("error init global http client: %v", err) } + globalHttpClient = client }