[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [meek/main] Fix the locking around rt.rt.
commit 46e612d2e9afd6e5dfa54c473ed17aeab49001af
Author: David Fifield <david@xxxxxxxxxxxxxxx>
Date: Wed Dec 29 22:06:41 2021 -0700
Fix the locking around rt.rt.
sync.Once does not prevent other goroutines from accessing a variable
that has not been defined yet.
---
meek-client/utls.go | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/meek-client/utls.go b/meek-client/utls.go
index 1f3effb..3bb5308 100644
--- a/meek-client/utls.go
+++ b/meek-client/utls.go
@@ -97,7 +97,7 @@ type UTLSRoundTripper struct {
clientHelloID *utls.ClientHelloID
config *utls.Config
proxyDialer proxy.Dialer
- rtOnce sync.Once
+ rtLock sync.Mutex
rt http.RoundTripper
// Transport for HTTP requests, which don't use uTLS.
@@ -114,12 +114,14 @@ func (rt *UTLSRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)
return nil, fmt.Errorf("unsupported URL scheme %q", req.URL.Scheme)
}
- // On the first call, make an http.Transport or http2.Transport as
- // appropriate.
var err error
- rt.rtOnce.Do(func() {
+ rt.rtLock.Lock()
+ if rt.rt == nil {
+ // On the first call, make an http.Transport or http2.Transport
+ // as appropriate.
rt.rt, err = makeRoundTripper(req.URL, rt.clientHelloID, rt.config, rt.proxyDialer)
- })
+ }
+ rt.rtLock.Unlock()
if err != nil {
return nil, err
}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits