When I set *catch-errors-p* to nil I often see this error in the debugger:
== I/O timeout reading #<SB-SYS:FD-STREAM for "a constant string" {B3E4CA1}> [Condition of type SB-SYS:IO-TIMEOUT] ==
even though I still get my pages in the browser.
Any idea why this happens?
On Fri, 15 Dec 2006 22:01:36 -0500, vedm mlist@rogers.com wrote:
When I set *catch-errors-p* to nil I often see this error in the debugger:
== I/O timeout reading #<SB-SYS:FD-STREAM for "a constant string" {B3E4CA1}> [Condition of type SB-SYS:IO-TIMEOUT] ==
even though I still get my pages in the browser.
Any idea why this happens?
What happens if you set *CATCH-ERRORS-P* to T? Can you send a backtrace? Which SBCL version? Which operating system?
Edi Weitz edi@agharta.de writes:
On Fri, 15 Dec 2006 22:01:36 -0500, vedm mlist@rogers.com wrote:
When I set *catch-errors-p* to nil I often see this error in the debugger:
== I/O timeout reading #<SB-SYS:FD-STREAM for "a constant string" {B3E4CA1}> [Condition of type SB-SYS:IO-TIMEOUT] ==
even though I still get my pages in the browser.
Any idea why this happens?
What happens if you set *CATCH-ERRORS-P* to T? Can you send a backtrace? Which SBCL version? Which operating system?
If I set *CATCH-ERRORS-P* to T I do not see this error. Note that even when I see this error I still get response from Hunchentoot.
I am on a Debian system:
CL-USER> (format t "Lisp implementation: ~A ~A~%OS: ~A ~A~%CPU: ~A ~A~%" (lisp-implementation-type) (lisp-implementation-version) (software-type) (software-version) (machine-type) (machine-version)) Lisp implementation: SBCL 1.0 OS: Linux 2.6.17-2-686 CPU: X86 AMD Athlon(tm) XP 2200+
And here is the backtrace:
===== I/O timeout reading #<SB-SYS:FD-STREAM for "a constant string" {AEA4211}> [Condition of type SB-SYS:IO-TIMEOUT]
Restarts: 0: [USE-VALUE] Specify a character to be used instead. 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "hunchentoot-worker-6" {AE95301}>)
Backtrace: 0: ((LAMBDA (SWANK-BACKEND::DEBUGGER-LOOP-FN)) #<FUNCTION (LAMBDA NIL) {A94A375}>) 1: (SWANK::CALL-WITH-BINDINGS ((*PRINT-PRETTY*) (*PRINT-LEVEL* . 4) (*PRINT-LENGTH* . 10) (*PRINT-CIRCLE* . T) (*PRINT-READABLY*) (*PRINT-PPRINT-DISPATCH* . #<SB-PRETTY:PPRINT-DISPATCH-TABLE {BAF5D01}>) (*PRINT-GENSYM* . T) (*PRINT-BASE* . 10) (*PRINT-RADIX*) (*PRINT-ARRAY* . T) ...) #<FUNCTION (LAMBDA NIL) {A94A335}>) 2: (SWANK::DEBUG-IN-EMACS #<SB-SYS:IO-TIMEOUT {AF05589}>) 3: ((LAMBDA (SWANK-BACKEND::HOOK SWANK-BACKEND::FUN)) #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL) {AF0578D}>) 4: (SWANK::CALL-WITH-REDIRECTED-IO #<SWANK::CONNECTION {B0A5F49}> #<CLOSURE (LAMBDA NIL) {AF0579D}>) 5: (SWANK::CALL-WITH-CONNECTION #<SWANK::CONNECTION {B0A5F49}> #<CLOSURE (LAMBDA NIL) {AF0578D}>) 6: (INVOKE-DEBUGGER #<SB-SYS:IO-TIMEOUT {AF05589}>) 7: (HUNCHENTOOT::MAYBE-INVOKE-DEBUGGER #<SB-SYS:IO-TIMEOUT {AF05589}>) 8: (SIGNAL #<SB-SYS:IO-TIMEOUT {AF05589}>) 9: (ERROR SB-SYS:IO-TIMEOUT) 10: (SB-IMPL::REFILL-BUFFER/FD #<SB-SYS:FD-STREAM for "a constant string" {AEA4211}>) 11: (SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE #<SB-SYS:FD-STREAM for "a constant string" {AEA4211}> NIL :EOF) 12: ((SB-PCL::FAST-METHOD STREAM-READ-BYTE (CHUNGA:CHUNKED-INPUT-STREAM)) (#(8 9) . #()) #<unavailable argument> #<CHUNGA:CHUNKED-IO-STREAM {AEB07A9}>) 13: (FLEXI-STREAMS::READ-BYTE* #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> NIL) 14: (FLEXI-STREAMS::READ-CHAR-8-BIT #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> #(0 1 2 3 4 5 6 7 8 9 ...)) 15: ((FLET FLEXI-STREAMS::GET-CHAR-CODE)) 16: ((SB-PCL::FAST-METHOD STREAM-READ-CHAR (FLEXI-STREAMS:FLEXI-INPUT-STREAM)) #<unavailable argument> #<unavailable argument> #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}>) 17: ((SB-PCL::FAST-METHOD STREAM-PEEK-CHAR (FUNDAMENTAL-CHARACTER-INPUT-STREAM)) #<unavailable argument> #<unavailable argument> #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}>) 18: (PEEK-CHAR NIL #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> T NIL #<unused argument>) 19: (CHUNGA:READ-LINE* #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> NIL) 20: (HUNCHENTOOT::GET-REQUEST-DATA) 21: (HUNCHENTOOT::PROCESS-CONNECTION #<HUNCHENTOOT::SERVER {B2F51D9}> #<SB-BSD-SOCKETS:INET-SOCKET descriptor 6 {AE16D09}>) 22: ((LAMBDA NIL)) 23: ("foreign function: call_into_lisp") 24: ("foreign function: funcall0") 25: ("foreign function: new_thread_trampoline") 26: ("foreign function: #xA7FAF0BD") ======
On Sat, 16 Dec 2006 14:18:03 -0500, vedm mlist@rogers.com wrote:
If I set *CATCH-ERRORS-P* to T I do not see this error.
Strange, and how did you get the backtrace then?
I/O timeout reading #<SB-SYS:FD-STREAM for "a constant string" {AEA4211}> [Condition of type SB-SYS:IO-TIMEOUT]
Restarts: 0: [USE-VALUE] Specify a character to be used instead. 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "hunchentoot-worker-6" {AE95301}>)
Backtrace: 0: ((LAMBDA (SWANK-BACKEND::DEBUGGER-LOOP-FN)) #<FUNCTION (LAMBDA NIL) {A94A375}>) 1: (SWANK::CALL-WITH-BINDINGS ((*PRINT-PRETTY*) (*PRINT-LEVEL* . 4) (*PRINT-LENGTH* . 10) (*PRINT-CIRCLE* . T) (*PRINT-READABLY*) (*PRINT-PPRINT-DISPATCH* . #<SB-PRETTY:PPRINT-DISPATCH-TABLE {BAF5D01}>) (*PRINT-GENSYM* . T) (*PRINT-BASE* . 10) (*PRINT-RADIX*) (*PRINT-ARRAY* . T) ...) #<FUNCTION (LAMBDA NIL) {A94A335}>) 2: (SWANK::DEBUG-IN-EMACS #<SB-SYS:IO-TIMEOUT {AF05589}>) 3: ((LAMBDA (SWANK-BACKEND::HOOK SWANK-BACKEND::FUN)) #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL) {AF0578D}>) 4: (SWANK::CALL-WITH-REDIRECTED-IO #<SWANK::CONNECTION {B0A5F49}> #<CLOSURE (LAMBDA NIL) {AF0579D}>) 5: (SWANK::CALL-WITH-CONNECTION #<SWANK::CONNECTION {B0A5F49}> #<CLOSURE (LAMBDA NIL) {AF0578D}>) 6: (INVOKE-DEBUGGER #<SB-SYS:IO-TIMEOUT {AF05589}>) 7: (HUNCHENTOOT::MAYBE-INVOKE-DEBUGGER #<SB-SYS:IO-TIMEOUT {AF05589}>) 8: (SIGNAL #<SB-SYS:IO-TIMEOUT {AF05589}>) 9: (ERROR SB-SYS:IO-TIMEOUT) 10: (SB-IMPL::REFILL-BUFFER/FD #<SB-SYS:FD-STREAM for "a constant string" {AEA4211}>) 11: (SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE #<SB-SYS:FD-STREAM for "a constant string" {AEA4211}> NIL :EOF) 12: ((SB-PCL::FAST-METHOD STREAM-READ-BYTE (CHUNGA:CHUNKED-INPUT-STREAM)) (#(8 9) . #()) #<unavailable argument> #<CHUNGA:CHUNKED-IO-STREAM {AEB07A9}>) 13: (FLEXI-STREAMS::READ-BYTE* #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> NIL) 14: (FLEXI-STREAMS::READ-CHAR-8-BIT #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> #(0 1 2 3 4 5 6 7 8 9 ...)) 15: ((FLET FLEXI-STREAMS::GET-CHAR-CODE)) 16: ((SB-PCL::FAST-METHOD STREAM-READ-CHAR (FLEXI-STREAMS:FLEXI-INPUT-STREAM)) #<unavailable argument> #<unavailable argument> #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}>) 17: ((SB-PCL::FAST-METHOD STREAM-PEEK-CHAR (FUNDAMENTAL-CHARACTER-INPUT-STREAM)) #<unavailable argument> #<unavailable argument> #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}>) 18: (PEEK-CHAR NIL #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> T NIL #<unused argument>) 19: (CHUNGA:READ-LINE* #<FLEXI-STREAMS:FLEXI-IO-STREAM {AEB3011}> NIL) 20: (HUNCHENTOOT::GET-REQUEST-DATA) 21: (HUNCHENTOOT::PROCESS-CONNECTION #<HUNCHENTOOT::SERVER {B2F51D9}> #<SB-BSD-SOCKETS:INET-SOCKET descriptor 6 {AE16D09}>) 22: ((LAMBDA NIL)) 23: ("foreign function: call_into_lisp") 24: ("foreign function: funcall0") 25: ("foreign function: new_thread_trampoline") 26: ("foreign function: #xA7FAF0BD")
I think this is a worker thread which dies from a timeout after having been idle for some time (i.e. after trying to read from his stream in vain). It looks as if the main problem is that these errors shouldn't be logged.
I'll have to investigate this when I have more time.
Cheers, Edi.
Edi Weitz edi@agharta.de writes:
On Sat, 16 Dec 2006 14:18:03 -0500, vedm mlist@rogers.com wrote:
If I set *CATCH-ERRORS-P* to T I do not see this error.
Strange, and how did you get the backtrace then?
That backtrace appears only when *CATCH-ERRORS-P* is set to nil (not to T).
-- vedm
On Sat, 16 Dec 2006 17:27:33 -0500, vedm mlist@rogers.com wrote:
Edi Weitz edi@agharta.de writes:
On Sat, 16 Dec 2006 14:18:03 -0500, vedm mlist@rogers.com wrote:
If I set *CATCH-ERRORS-P* to T I do not see this error.
Strange, and how did you get the backtrace then?
That backtrace appears only when *CATCH-ERRORS-P* is set to nil (not to T).
Sorry, I was confused... :)
Basically, mx explanation in the other email was right except for the logging part. There should /probably/ be some cleanup that prevents errors like this one (that aren't really errors) to pop up the debugger.