summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2020-10-26 23:14:30 +0100
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2020-10-26 23:14:30 +0100
commit7cc51241a1945faeeb9a2bd64ad968f521a18cf5 (patch)
tree1cf921e2e82e94d70420e20b3c0d9c46b679395e
parent4006528c1a7877977ef3d14d322420471235f542 (diff)
Make socket blocking on dbg_sys_getc
-rw-r--r--gdbstub/gdbstub_sys.c48
1 files 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;