Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HT breaking when the TCP connection ends #182

Open
phmarek opened this issue Jun 8, 2020 · 1 comment
Open

HT breaking when the TCP connection ends #182

phmarek opened this issue Jun 8, 2020 · 1 comment

Comments

@phmarek
Copy link
Contributor

phmarek commented Jun 8, 2020

When the TCP connection goes away at a bad time, HT breaks as well and (with QUUX-HUNCHENTOOT) takes the whole image with it.

I understand that fixing HT is only one part of the puzzle.

The condition The condition couldn't read from #<SB-SYS:FD-STREAM for "socket 127.0.0.1:9600, peer: 127.0.0.1:58844" {1005BF5BA3}>:
                              Connection reset by peer occurred with errno: 0. occurred with errno: 0.
WARNING: lparallel: Replacing lost or dead worker.
Unhandled SB-THREAD:JOIN-THREAD-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                                   {10006A0083}>:
  Joining thread failed: thread #<THREAD "Anonymous thread" ABORTED
                                   {1006413CD3}> did not return normally.

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10006A0083}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<SB-THREAD:JOIN-THREAD-ERROR {1005CE91B3}> #<unused argument> :QUIT NIL)
1: ((LAMBDA (SB-THREAD::C SB-THREAD::H) :IN SB-THREAD::%EXIT-OTHER-THREADS) #<SB-THREAD:JOIN-THREAD-ERROR {1005CE91B3}> #<FUNCTION (LAMBDA (SB-THREAD::C SB-THREAD::H) :IN SB-THREAD::%EXIT-OTHER-THREADS) {529F56DB}>)
2: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<SB-THREAD:JOIN-THREAD-ERROR {1005CE91B3}>)
3: (INVOKE-DEBUGGER #<SB-THREAD:JOIN-THREAD-ERROR {1005CE91B3}>)
4: (ERROR SB-THREAD:JOIN-THREAD-ERROR :THREAD #<SB-THREAD:THREAD "Anonymous thread" ABORTED {1006413CD3}> :PROBLEM :ABORT)
5: (SB-THREAD:JOIN-THREAD #<SB-THREAD:THREAD "Anonymous thread" ABORTED {1006413CD3}> :DEFAULT NIL :TIMEOUT NIL)
6: (BORDEAUX-THREADS:JOIN-THREAD #<SB-THREAD:THREAD "Anonymous thread" ABORTED {1006413CD3}>)
7: (MAIN::MAIN)
8: ((FLET SB-UNIX::BODY :IN SAVE-LISP-AND-DIE))
9: ((FLET "WITHOUT-INTERRUPTS-BODY-14" :IN SAVE-LISP-AND-DIE))
10: ((LABELS SB-IMPL::RESTART-LISP :IN SAVE-LISP-AND-DIE))

unhandled condition in --disable-debugger mode, quitting

I can reproduce a similar problem with this line for bash:

	( printf "GET /static/foo.png HTTP/1.1\r\nHost: any\r\nKeep-Alive: timeout=20\r\n\r\n" >&0 ; perl -e 'sysread(0, $x, 500);') <> /dev/tcp/127.0.0.1/9600

This gives me (yeah, different port number)

The condition The condition couldn't read from #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}>:
                              Connection reset by peer occurred with errno: 0. occurred with errno: 0.
   [Condition of type USOCKET:UNKNOWN-ERROR]

Restarts:
  0. TRANSFER-ERROR - Transfer this error to a dependent thread, if one exists.
  1. KILL-ERRORS    - Kill errors in workers (remove debugger instances).
  2. ABORT          - abort thread (#<THREAD "quux-hunchentoot-thread-pool-0.0.0.0:8092" RUNNING {100807ACF3}>)

Frames:
  0.  (USOCKET::HANDLE-CONDITION #<USOCKET:UNKNOWN-ERROR {1004ADF853}> NIL NIL)
  1.  ((FLET "H0" :IN HUNCHENTOOT:PROCESS-CONNECTION) #<USOCKET:UNKNOWN-ERROR {1004ADF853}>)
  2.  (SB-KERNEL::%SIGNAL #<USOCKET:UNKNOWN-ERROR {1004ADF853}>)
  3.  (ERROR USOCKET:UNKNOWN-ERROR :REAL-ERROR #<SB-INT:SIMPLE-STREAM-ERROR "~@<~?~@[: ~2I~_~A~]~:>" {1004ADF813}> :SOCKET NIL)
  4.  (USOCKET::HANDLE-CONDITION #<SB-INT:SIMPLE-STREAM-ERROR "~@<~?~@[: ~2I~_~A~]~:>" {1004ADF813}> NIL NIL)
  5.  ((FLET "H0" :IN HUNCHENTOOT::READ-INITIAL-REQUEST-LINE) #<SB-INT:SIMPLE-STREAM-ERROR "~@<~?~@[: ~2I~_~A~]~:>" {1004ADF813}>)
  6.  (SB-KERNEL::%SIGNAL #<SB-INT:SIMPLE-STREAM-ERROR "~@<~?~@[: ~2I~_~A~]~:>" {1004ADF813}>)
  7.  (ERROR SB-INT:SIMPLE-STREAM-ERROR :STREAM #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}> :FORMAT-CONTROL "~@<~?~@[: ~2I~_~A~]~:>" :FORMAT-ARGUMENTS ("couldn't read..
  8.  (SB-IMPL::REFILL-INPUT-BUFFER #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}>)
  9.  (SB-IMPL::INPUT-UNSIGNED-8BIT-BYTE #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}> NIL NIL)
  10. (READ-BYTE #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}> NIL NIL)
  11. (CHUNGA:READ-CHAR* #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}> NIL NIL)
  12. (CHUNGA:READ-LINE* #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}> NIL)
  13. ((FLET "FORM-FUN-4" :IN HUNCHENTOOT::READ-INITIAL-REQUEST-LINE))
  14. (HUNCHENTOOT::READ-INITIAL-REQUEST-LINE #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}>)
  15. (HUNCHENTOOT::GET-REQUEST-DATA #<SB-SYS:FD-STREAM for "socket 127.0.0.1:8092, peer: 127.0.0.1:57338" {1003731223}>)
  ...

Should this be fixed at the HT layer? And/or with CHUNGA?
The application cannot, this is outside any application code.

Thanks for your help!

@fjl
Copy link
Contributor

fjl commented Jul 29, 2021

This is already reported in #146.
The issue needs to be fixed in hunchtentoot, but it's still a bit unclear where
exactly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants