Changeset 3417

Show
Ignore:
Timestamp:
07/09/08 07:54:03 (6 months ago)
Author:
hans
Message:

Remove WORKERS slot from ONE-SLOT-PER-CONNECTION-MANAGER. Workers were
never removed from the list and it was used only for shutdown in LispWorks?.
As worker processes synchronously check for server shutdown anyway, losing
the WORKERS slot was the best option to remove the leak.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/thirdparty/hunchentoot/connection-manager.lisp

    r3321 r3417  
    9090 
    9191(defclass one-thread-per-connection-manager (connection-manager) 
    92   ((workers :initform nil 
    93             :accessor connection-manager-workers 
    94             :documentation "A list of currently active worker 
    95 threads.")) 
     92  () 
    9693  (:documentation "Connection manager that starts one thread for 
    9794listening to incoming requests and one thread for each incoming 
    9895connection.")) 
    99  
    100 (defmethod print-object ((manager one-thread-per-connection-manager) stream) 
    101   (print-unreadable-object (manager stream :type t) 
    102     (format stream "~A worker~:P" (length (connection-manager-workers manager))))) 
    10396 
    10497(defmethod execute-listener ((manager one-thread-per-connection-manager)) 
     
    120113    (when *cleanup-function* 
    121114      (funcall *cleanup-function*))) 
    122   ;; start a worker thread for this connection and remember it 
    123   (push (mp:process-run-function (format nil "Hunchentoot worker \(client: ~{~A:~A~})" 
    124                                          (multiple-value-list 
    125                                           (get-peer-address-and-port handle))) 
    126                                  nil #'process-connection 
    127                                  (server manager) handle) 
    128         (connection-manager-workers manager))) 
     115  (mp:process-run-function (format nil "Hunchentoot worker \(client: ~{~A:~A~})" 
     116                                   (multiple-value-list 
     117                                    (get-peer-address-and-port handle))) 
     118                           nil #'process-connection 
     119                           (server manager) handle)) 
    129120 
    130121#-:lispworks 
    131122(defmethod handle-incoming-connection ((manager one-thread-per-connection-manager) socket) 
    132   (push (bt:make-thread (lambda () 
    133                           (process-connection (server manager) socket)) 
    134                         :name (format nil "Hunchentoot worker \(client: ~A:~A)" 
    135                                       (usocket:vector-quad-to-dotted-quad (usocket:get-peer-address socket)) 
    136                                       (usocket:get-peer-port socket))) 
    137         (connection-manager-workers manager))) 
    138  
    139 #+:lispworks 
    140 (defmethod shutdown ((manager one-thread-per-connection-manager)) 
    141   ;; kill all worker threads 
    142   (dolist (worker (connection-manager-workers manager)) 
    143     (ignore-errors 
    144       (when (mp:process-alive-p worker) 
    145         (mp:process-kill worker))) 
    146     (mp:process-allow-scheduling)) 
    147   ;; finally, kill main listener 
    148   (call-next-method)) 
     123  (bt:make-thread (lambda () 
     124                    (process-connection (server manager) socket)) 
     125                  :name (format nil "Hunchentoot worker \(client: ~A:~A)" 
     126                                (usocket:vector-quad-to-dotted-quad (usocket:get-peer-address socket)) 
     127                                (usocket:get-peer-port socket))))