Changeset 3417
- Timestamp:
- 07/09/08 07:54:03 (6 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/thirdparty/hunchentoot/connection-manager.lisp
r3321 r3417 90 90 91 91 (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 () 96 93 (:documentation "Connection manager that starts one thread for 97 94 listening to incoming requests and one thread for each incoming 98 95 connection.")) 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)))))103 96 104 97 (defmethod execute-listener ((manager one-thread-per-connection-manager)) … … 120 113 (when *cleanup-function* 121 114 (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)) 129 120 130 121 #-:lispworks 131 122 (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))))
