~ chicken-core (chicken-5) 6f08865afdbbeec4f376d5b8a7d3c2f4c6e0f6f8


commit 6f08865afdbbeec4f376d5b8a7d3c2f4c6e0f6f8
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Thu Mar 14 21:42:47 2019 +1300
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Mar 14 10:38:29 2019 +0100

    Avoid spin loop in socket_read() when debug client disconnects
    
    Signed-off-by: felix <felix@call-with-current-continuation.org>

diff --git a/dbg-stub.c b/dbg-stub.c
index 348a77f6..218d8506 100644
--- a/dbg-stub.c
+++ b/dbg-stub.c
@@ -159,7 +159,7 @@ socket_read()
       if(*(input_buffer_top++) == '\n') {
         *ptr = '\0';
         --input_buffer_len;
-        return 0;
+        return 1;
       }
 
       if(++off >= RW_BUFFER_SIZE) return -1; /* read-buffer overflow */
@@ -171,6 +171,8 @@ socket_read()
 
     if(n == SOCKET_ERROR) return -1; /* read failed */
 
+    if(n == 0) return 0; /* client disconnect */
+
     input_buffer_len = n;
     input_buffer_top = input_buffer;
   }
@@ -304,7 +306,11 @@ send_event(int event, C_char *loc, C_char *val, C_char *cloc)
     send_string_value(cloc);
     send_string(")\n");
 
-    if(socket_read() < 0) terminate("read failed");
+    n = socket_read();
+
+    if(n < 0) terminate("read failed");
+
+    if(n == 0) terminate("debugger disconnected");
 
     /* fprintf(stderr, "<READ: %s>\n", rw_buffer); */
     n = sscanf(rw_buffer, "(%d ", &reply);
Trap