From 7cc51241a1945faeeb9a2bd64ad968f521a18cf5 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Mon, 26 Oct 2020 23:14:30 +0100 Subject: Make socket blocking on dbg_sys_getc --- gdbstub/gdbstub_sys.c | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/gdbstub/gdbstub_sys.c b/gdbstub/gdbstub_sys.c index ef81bd2d..688cf1e3 100644 --- a/gdbstub/gdbstub_sys.c +++ b/gdbstub/gdbstub_sys.c @@ -79,35 +79,39 @@ int dbg_sys_getc(void) while (1) { char packet; size_t len = sizeof packet; - const enum read_socket_err err = ReadSocket(client_socket, &packet, &len); + SetsBlock(client_socket); + { + const enum read_socket_err err = ReadSocket(client_socket, &packet, &len); #ifdef _POSIX_VERSION - if (exit_loop) - pthread_exit(NULL); + if (exit_loop) + pthread_exit(NULL); #endif - switch (err) { - case READ_SOCKET_OK: - return packet; + switch (err) { + case READ_SOCKET_OK: + return packet; - case READ_SOCKET_SHUTDOWN: { - struct msg msg; + case READ_SOCKET_SHUTDOWN: { + struct msg msg; - printf("gdb shutdown\n"); - client_socket = 0; - msg.type = MSG_TYPE_SHUTDOWN; + printf("gdb shutdown\n"); + client_socket = 0; + msg.type = MSG_TYPE_SHUTDOWN; - if (mq_send(out_queue, (const char *)&msg, sizeof msg, 0)) - perror("dbg_sys_getc() mq_send()"); - return EOF; - } + if (mq_send(out_queue, (const char *)&msg, sizeof msg, 0)) + perror("dbg_sys_getc() mq_send()"); + return EOF; + } - case READ_SOCKET_ERR_INVALID_ARG: - /* Fall through. */ - case READ_SOCKET_ERR_RECV: - /* Fall through. */ - default: - break; + case READ_SOCKET_ERR_RECV: + SetsBlock(client_socket); + /* Fall through. */ + case READ_SOCKET_ERR_INVALID_ARG: + /* Fall through. */ + default: + break; + } } } } @@ -138,6 +142,8 @@ static int wait_hit_or_break(struct msg *msg) if (exit_loop) return 1; + SetsNonblock(client_socket); + if (ret < 0 && errno == EAGAIN) { /* Breakpoint has not been hit yet, look for incoming messages from gdb. */ char packet; -- cgit v1.2.3