Changeset 29870 in project


Ignore:
Timestamp:
10/08/13 21:45:27 (8 years ago)
Author:
sjamaan
Message:

http-client: Drastically reduce CPU usage for downloads by changing make-delimited-input-port so it implements custom read-string! and read-line procedures as well

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/http-client/trunk/http-client.scm

    r29772 r29870  
    197197      port ;; no need to delimit anything
    198198      (let ((pos 0))
    199         (make-input-port (lambda () ; read
    200                            (if (= pos len)
    201                                #!eof
    202                                (let ((char (read-char port)))
    203                                  (set! pos (add1 pos))
    204                                  char)))
    205                          (lambda () ; char-ready?
    206                            (if (= pos len)
    207                                #f
    208                                (char-ready? port)))
    209                          (lambda () ; close
    210                            (close-input-port port))))))
     199        (make-input-port
     200         (lambda ()                     ; read-char
     201           (if (= pos len)
     202               #!eof
     203               (let ((char (read-char port)))
     204                 (set! pos (add1 pos))
     205                 char)))
     206         (lambda ()                     ; char-ready?
     207           (if (= pos len)
     208               #f
     209               (char-ready? port)))
     210         (lambda ()                     ; close
     211           (close-input-port port))
     212         (lambda ()                     ; peek-char
     213           (peek-char port))
     214         (lambda (p bytes buf off)      ; read-string!
     215           (let* ((bytes (min bytes (- len pos)))
     216                  (bytes-read (read-string! bytes buf port off)))
     217             (set! pos (+ pos bytes-read))
     218             bytes-read))
     219         (lambda (p limit)              ; read-line
     220           (let* ((bytes-left (- len pos))
     221                  (limit (min (or limit bytes-left) bytes-left))
     222                  (line (read-line port limit)))
     223             (unless (eof-object? line)
     224               (set! pos (+ pos (string-length line))))
     225             line))))))
    211226
    212227(define discard-remaining-data!
Note: See TracChangeset for help on using the changeset viewer.