Changeset 18031 in project


Ignore:
Timestamp:
05/10/10 07:10:18 (9 years ago)
Author:
Jim Ursetto
Message:

spiffy: when max-connections is reached, suspend accept loop

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/spiffy/trunk/spiffy.scm

    r17978 r18031  
    487487             (accept-next-connection
    488488              (lambda ()
    489                 (if (>= (mutex-specific thread-count) (max-connections))
    490                     (thread-yield!) ; Can't accept right now, wait & try again
    491                     (receive (in out)
     489                (let ((accept-thread (current-thread)))
     490                  (if (>= (mutex-specific thread-count)
     491                          (max-connections))
     492                      (thread-suspend! accept-thread))  ; Can't accept right now, suspend until we can
     493                  (receive (in out)
    492494                      (if ssl-context
    493495                          (ssl-accept listener)
    494496                          (tcp-accept listener))
    495                       (mutex-update! thread-count add1)
    496                       (thread-start!
    497                        (lambda ()
    498                          ;; thread-count _must_ be updated, so trap all exns
    499                          (handle-exceptions
    500                           e (void)
    501                           (receive (local remote)
    502                             (tcp-addresses in)
    503                             (log-to (debug-log)
    504                                     "~A: incoming request from ~A"
    505                                     (thread-name (current-thread)) remote)
    506                             ;; This won't change during the session
    507                             (parameterize ((remote-address remote)
    508                                            (local-address local)
    509                                            (handle-another-request? #t))
    510                               (let handle-next-request ()
    511                                 (when (handle-incoming-request in out)
    512                                   (log-to (debug-log)
    513                                           "~A: kept alive"
    514                                           (thread-name (current-thread)))
    515                                   (handle-next-request)))
    516                               (log-to (debug-log)
    517                                           "~A: closing off"
    518                                           (thread-name (current-thread)))
    519                               (close-input-port in)
    520                               (close-output-port out))))
    521                          (mutex-update! thread-count sub1)))))
     497                    (mutex-update! thread-count add1)
     498                    (thread-start!
     499                     (lambda ()
     500                       ;; thread-count _must_ be updated, so trap all exns
     501                       (handle-exceptions
     502                           e (void)
     503                         (receive (local remote)
     504                             (tcp-addresses in)
     505                           (log-to (debug-log)
     506                                   "~A: incoming request from ~A"
     507                                   (thread-name (current-thread)) remote)
     508                           ;; This won't change during the session
     509                           (parameterize ((remote-address remote)
     510                                          (local-address local)
     511                                          (handle-another-request? #t))
     512                             (let handle-next-request ()
     513                               (when (handle-incoming-request in out)
     514                                 (log-to (debug-log)
     515                                         "~A: kept alive"
     516                                         (thread-name (current-thread)))
     517                                 (handle-next-request)))
     518                             (log-to (debug-log)
     519                                     "~A: closing off"
     520                                     (thread-name (current-thread)))
     521                             (close-input-port in)
     522                             (close-output-port out))))
     523                       (mutex-update! thread-count sub1)
     524                       (thread-resume! accept-thread)))))
    522525                (accept-next-connection))))
    523526      ;; Drop privileges ASAP, now the TCP listener has been created
Note: See TracChangeset for help on using the changeset viewer.