On Mon, Jan 25, 2010 at 21:25, Anton Vodonosov <avodonosov@yandex.ru> wrote:I think you need to set *CATCH-ERRORS-P* to a non-NIL value in order
> On one server running hunchentoot quite often the following error occurs:
>
> 23: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #)
> 24: (INVOKE-DEBUGGER #)
> 25: (ERROR SB-BSD-SOCKETS:NOT-CONNECTED-ERROR)[:EXTERNAL]
> 26: (SB-BSD-SOCKETS:SOCKET-ERROR "getpeername")
> 27: ((SB-PCL::FAST-METHOD SB-BSD-SOCKETS:SOCKET-PEERNAME (SB-BSD-SOCKETS:SOCKET)) # # #)
to prevent the debugger from being entered when an error is signaled.
To me, this looks right:
#-:lispworks
(defmethod handle-incoming-connection ((taskmaster
one-thread-per-connection-taskmaster) socket)
;; we are handling all conditions here as we want to make sure that
;; the acceptor process never crashes while trying to create a
;; worker thread; one such problem exists in
;; GET-PEER-ADDRESS-AND-PORT which can signal socket conditions on
;; some platforms in certain situations.
(handler-case*
(bt:make-thread (lambda ()
(process-connection (taskmaster-acceptor
taskmaster) socket))
:name (format nil "Hunchentoot worker \(client:
~A)" (client-as-string socket)))
(error (cond)
;; need to bind *ACCEPTOR* so that LOG-MESSAGE can do its work.
(let ((*acceptor* (taskmaster-acceptor taskmaster)))
(log-message *lisp-errors-log-level*
"Error while creating worker thread for new
incoming connection: ~A" cond)))))
I might certainly be missing something, so please let me know if this
is the case. For production installations, it is not advisable to
have *CATCH-ERRORS-P* to be set to NIL.
-Hans
_______________________________________________
tbnl-devel site list
tbnl-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/tbnl-devel