diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2021-04-26 02:48:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-25 21:48:12 +0300 |
commit | 3d5bb3e6a34bfb8073f6c61eb506cbdc927efbd4 (patch) | |
tree | d73b126596baaa256efa5d06c5ce97c9141c7dbc | |
parent | 6ea6e2b4eb339f58f805783532f1b481fec67375 (diff) | |
download | gitea-3d5bb3e6a34bfb8073f6c61eb506cbdc927efbd4.tar.gz gitea-3d5bb3e6a34bfb8073f6c61eb506cbdc927efbd4.zip |
fix webhook timeout bug (#15613)
* Also fix the potential problem in httplib
-rw-r--r-- | modules/httplib/httplib.go | 9 | ||||
-rw-r--r-- | services/webhook/deliver.go | 8 |
2 files changed, 7 insertions, 10 deletions
diff --git a/modules/httplib/httplib.go b/modules/httplib/httplib.go index 62f284d2e1..294ad0b70b 100644 --- a/modules/httplib/httplib.go +++ b/modules/httplib/httplib.go @@ -325,7 +325,7 @@ func (r *Request) getResponse() (*http.Response, error) { trans = &http.Transport{ TLSClientConfig: r.setting.TLSClientConfig, Proxy: proxy, - Dial: TimeoutDialer(r.setting.ConnectTimeout, r.setting.ReadWriteTimeout), + Dial: TimeoutDialer(r.setting.ConnectTimeout), } } else if t, ok := trans.(*http.Transport); ok { if t.TLSClientConfig == nil { @@ -335,7 +335,7 @@ func (r *Request) getResponse() (*http.Response, error) { t.Proxy = r.setting.Proxy } if t.Dial == nil { - t.Dial = TimeoutDialer(r.setting.ConnectTimeout, r.setting.ReadWriteTimeout) + t.Dial = TimeoutDialer(r.setting.ConnectTimeout) } } @@ -352,6 +352,7 @@ func (r *Request) getResponse() (*http.Response, error) { client := &http.Client{ Transport: trans, Jar: jar, + Timeout: r.setting.ReadWriteTimeout, } if len(r.setting.UserAgent) > 0 && len(r.req.Header.Get("User-Agent")) == 0 { @@ -457,12 +458,12 @@ func (r *Request) Response() (*http.Response, error) { } // TimeoutDialer returns functions of connection dialer with timeout settings for http.Transport Dial field. -func TimeoutDialer(cTimeout time.Duration, rwTimeout time.Duration) func(net, addr string) (c net.Conn, err error) { +func TimeoutDialer(cTimeout time.Duration) func(net, addr string) (c net.Conn, err error) { return func(netw, addr string) (net.Conn, error) { conn, err := net.DialTimeout(netw, addr, cTimeout) if err != nil { return nil, err } - return conn, conn.SetDeadline(time.Now().Add(rwTimeout)) + return conn, nil } } diff --git a/services/webhook/deliver.go b/services/webhook/deliver.go index 8ac7d8c192..a417a9e846 100644 --- a/services/webhook/deliver.go +++ b/services/webhook/deliver.go @@ -271,14 +271,10 @@ func InitDeliverHooks() { TLSClientConfig: &tls.Config{InsecureSkipVerify: setting.Webhook.SkipTLSVerify}, Proxy: webhookProxy(), Dial: func(netw, addr string) (net.Conn, error) { - conn, err := net.DialTimeout(netw, addr, timeout) - if err != nil { - return nil, err - } - - return conn, conn.SetDeadline(time.Now().Add(timeout)) + return net.DialTimeout(netw, addr, timeout) // dial timeout }, }, + Timeout: timeout, // request timeout } go graceful.GetManager().RunWithShutdownContext(DeliverHooks) |