Merge pull request #1415 from tonyg/fix_1414_fd_leak_HEAD
Explicitly close the http-conn on http-sendrecv with method HEAD.
This commit is contained in:
commit
986ea517d1
|
@ -237,6 +237,11 @@
|
|||
(http-conn-open! hc host-bs #:ssl? ssl? #:port port)
|
||||
hc)
|
||||
|
||||
(define (head? method-bss)
|
||||
(or (equal? method-bss #"HEAD")
|
||||
(equal? method-bss "HEAD")
|
||||
(equal? method-bss 'HEAD)))
|
||||
|
||||
(define (http-conn-recv! hc
|
||||
#:method [method-bss #"GET"]
|
||||
#:content-decode [decodes '(gzip)]
|
||||
|
@ -248,13 +253,9 @@
|
|||
(regexp-member #rx#"^(?i:Connection: +close)$" headers)))
|
||||
(when close?
|
||||
(http-conn-abandon! hc))
|
||||
(define head?
|
||||
(or (equal? method-bss #"HEAD")
|
||||
(equal? method-bss "HEAD")
|
||||
(equal? method-bss 'HEAD)))
|
||||
(define-values (raw-response-port wait-for-close?)
|
||||
(cond
|
||||
[head? (values (open-input-bytes #"") #f)]
|
||||
[(head? method-bss) (values (open-input-bytes #"") #f)]
|
||||
[(regexp-member #rx#"^(?i:Transfer-Encoding: +chunked)$" headers)
|
||||
(values (http-conn-response-port/chunked! hc #:close? #t)
|
||||
#t)]
|
||||
|
@ -273,7 +274,7 @@
|
|||
(values (http-conn-response-port/rest! hc) #t)]))
|
||||
(define decoded-response-port
|
||||
(cond
|
||||
[head? raw-response-port]
|
||||
[(head? method-bss) raw-response-port]
|
||||
[(and (memq 'gzip decodes)
|
||||
(regexp-member #rx#"^(?i:Content-Encoding: +gzip)$" headers)
|
||||
(not (eof-object? (peek-byte raw-response-port))))
|
||||
|
@ -323,13 +324,15 @@
|
|||
#:data [data #f]
|
||||
#:content-decode [decodes '(gzip)])
|
||||
(define hc (http-conn-open host-bs #:ssl? ssl? #:port port))
|
||||
(http-conn-sendrecv! hc url-bs
|
||||
(begin0 (http-conn-sendrecv! hc url-bs
|
||||
#:version version-bs
|
||||
#:method method-bss
|
||||
#:headers headers-bs
|
||||
#:data data
|
||||
#:content-decode decodes
|
||||
#:close? #t))
|
||||
#:close? #t)
|
||||
(when (head? method-bss)
|
||||
(http-conn-close! hc))))
|
||||
|
||||
(define data-procedure/c
|
||||
(-> (-> (or/c bytes? string?) void?) any))
|
||||
|
|
Loading…
Reference in New Issue
Block a user