From d96df57f84ab2de1007c715f454dbc4ae3ab7cc0 Mon Sep 17 00:00:00 2001 From: "K. Lange" Date: Wed, 24 Nov 2021 22:07:18 +0900 Subject: [PATCH] netty: quick hack to use threads so pasting doesn't deadlock --- apps/netty.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/apps/netty.c b/apps/netty.c index 7531c623..68a75258 100644 --- a/apps/netty.c +++ b/apps/netty.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -22,8 +23,28 @@ #include #include +int fd_master, fd_slave, fd_serial; +volatile int _stop = 0; + +void * handle_in(void * unused) { + while (!_stop) { + int index = fswait2(1,&fd_serial,200); + char buf[1]; + int r; + switch (index) { + case 0: /* fd_serial */ + r = read(fd_serial, buf, 1); + if (r > 0) { + write(fd_master, buf, r); + } + break; + } + } + + return NULL; +} + int main(int argc, char * argv[]) { - int fd_master, fd_slave, fd_serial; char * user = NULL; if (getuid() != 0) { @@ -80,8 +101,9 @@ int main(int argc, char * argv[]) { return 1; } - fd_serial = sock; //open(file, O_RDWR); + pthread_t input_buffer_thread; + pthread_create(&input_buffer_thread, NULL, handle_in, NULL); pid_t child = fork(); @@ -104,18 +126,12 @@ int main(int argc, char * argv[]) { exit(1); } else { - int fds[2] = {fd_serial, fd_master}; - while (1) { - int index = fswait2(2,fds,200); + int index = fswait2(1,&fd_master,200); char buf[1024]; int r; switch (index) { - case 0: /* fd_serial */ - r = read(fd_serial, buf, 1); - write(fd_master, buf, 1); - break; - case 1: /* fd_master */ + case 0: /* fd_master */ r = read(fd_master, buf, 1024); write(fd_serial, buf, r); break; @@ -124,6 +140,7 @@ int main(int argc, char * argv[]) { int result = waitpid(child, NULL, WNOHANG); if (result > 0) { /* Child login shell has returned (session ended) */ + _stop = 1; return 0; } }