Christopher Baines <m...@cbaines.net> skribis: > Ludovic Courtès <l...@gnu.org> writes: > >> Indeed, there’s one place on the hot path where we install exception >> handlers: in ‘http-multiple-get’ (from commit >> 205833b72c5517915a47a50dbe28e7024dc74e57). I don’t think it’s needed, >> is it? (But if it is, let’s find another approach, this one is >> prohibitively expensive.) > > I think the exception handling has moved around, but I guess the > exceptions that could be caught in http-multiple-get could happen, > right? I am really just guessing here, as Guile doesn't help tell you > about possible exceptions, and I haven't spent enough time to read all > the possible code involved to find out if these are definitely possible.
Yeah. Commit 205833b72c5517915a47a50dbe28e7024dc74e57 added a ‘catch’ block that catches the same things as ‘with-cached-connection’ did (it would be better to not duplicate it IMO). That includes EPIPE, gnutls-error, bad-response & co. Earlier, commit be5a75ebb5988b87b2392e2113f6590f353dd6cd (“substitute: Reuse connections for '--query'.”) did not add such a ‘catch’ block in ‘http-multiple-get’. Instead, it wrapped its call in ‘do-fetch’ in ‘fetch-narinfos’:
(define (do-fetch uri) (case (and=> uri uri-scheme) ((http https) - (let ((requests (map (cut narinfo-request url <>) paths))) - (match (open-connection-for-uri/maybe uri) - (#f - '()) - (port - (update-progress!) ;; Note: Do not check HTTPS server certificates to avoid depending ;; on the X.509 PKI. We can do it because we authenticate ;; narinfos, which provides a much stronger guarantee. - (let ((result (http-multiple-get uri + (let* ((requests (map (cut narinfo-request url <>) paths)) + (result (call-with-cached-connection uri + (lambda (port) + (if port + (begin + (update-progress!) + (http-multiple-get uri handle-narinfo-response '() requests + #:open-connection + open-connection-for-uri/cached #:verify-certificate? #f - #:port port)))
This bit is still there in current ‘master’, so I think it’s not necessary to catch these exceptions in ‘http-multiple-get’ itself, and I would just remove the ‘catch’ wrap altogether. WDYT? Thanks, Ludo’.