commit 166f335337989ee9ac1c92a5f126c4d0b9d49f70
parent d979098fd07f9d2a78f6c3c120683b1e682d21bc
Author: Brian Swetland <swetland@frotz.net>
Date: Tue, 23 Jun 2015 21:57:49 -0700
debugger: straighten out locking, fix display corruption
Diffstat:
2 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/tools/debugger-core.c b/tools/debugger-core.c
@@ -114,22 +114,14 @@ static pthread_t _listen_master;
void *gdb_listener(void *arg) {
int fd;
if ((fd = socket_listen_tcp(5555)) < 0) {
- linenoisePause();
- xprintf("gdb_listener() cannot bind to 5555\n");
- linenoiseResume();
+ fprintf(stderr, "gdb_listener() cannot bind to 5555\n");
return NULL;
}
for (;;) {
int s = accept(fd, NULL, NULL);
if (s >= 0) {
- linenoisePause();
- xprintf("[ gdb connected ]\n");
- linenoiseResume();
gdb_server(s);
close(s);
- linenoisePause();
- xprintf("[ gdb disconnected ]\n");
- linenoiseResume();
}
}
return NULL;
@@ -430,7 +422,9 @@ static int _debugger_exec(const char *cmd, unsigned argc, param *argv) {
if (!strcasecmp(cmd, c->name)) {
int n;
debugger_lock();
+ linenoisePause();
n = c->func(argc, argv);
+ linenoiseResume();
debugger_unlock();
return n;
}
diff --git a/tools/gdb-bridge.c b/tools/gdb-bridge.c
@@ -284,7 +284,7 @@ static void handle_query(struct gdbcnxn *gc, char *cmd, char *args) {
p+=2;
}
*cmd = 0;
- zprintf("GBD: %s\n", p);
+ zprintf("GDB: %s\n", args);
debugger_unlock();
debugger_command(args);
debugger_lock();
@@ -580,6 +580,7 @@ void gdb_server(int fd) {
if (pipefds[0] == -1) {
if (pipe(pipefds)) ;
}
+ zprintf("[ gdb connected ]\n");
debugger_unlock();
// gc.flags |= F_TRACE;
@@ -623,7 +624,7 @@ void gdb_server(int fd) {
r = read(fd, iobuf, sizeof(iobuf));
if (r <= 0) {
if (errno == EINTR) continue;
- return;
+ break;
}
len = r;
ptr = iobuf;
@@ -638,4 +639,8 @@ void gdb_server(int fd) {
if (read(fds[1].fd, &x, 1) < 0) ;
}
}
+
+ debugger_lock();
+ zprintf("[ gdb connected ]\n");
+ debugger_unlock();
}