diff --git a/client.c b/client.c index cd25924..003676f 100644 --- a/client.c +++ b/client.c @@ -107,6 +107,7 @@ static int client_mainloop(void) { client.need_resize = true; break; case MSG_EXIT: + info("MSG_EXIT from server.socket\n"); client_send_packet(&pkt); close(server.socket); return pkt.u.i; @@ -126,47 +127,20 @@ static int client_mainloop(void) { bool detach = false; switch (pkt.u.msg[0]) { case 'd': - server.next_session = "\0"; + server.next_session[0] = '\0'; detach = true; break; case '0': - server.next_session = "0"; - detach = true; - break; case '1': - server.next_session = "1"; - detach = true; - break; case '2': - server.next_session = "2"; - detach = true; - break; case '3': - server.next_session = "3"; - detach = true; - break; case '4': - server.next_session = "4"; - detach = true; - break; case '5': - server.next_session = "5"; - detach = true; - break; case '6': - server.next_session = "6"; - detach = true; - break; case '7': - server.next_session = "7"; - detach = true; - break; case '8': - server.next_session = "8"; - detach = true; - break; case '9': - server.next_session = "9"; + server.next_session[0] = pkt.u.msg[0]; detach = true; break; } @@ -188,8 +162,10 @@ static int client_mainloop(void) { } } else if (len == 0) { debug("client-stdin: EOF\n"); - server.next_session = "\0"; - return RV_DETACH; + info("EOF from stdin\n"); + server.next_session[0] = '\0'; + /* close(server.socket); */ + return 0; } } } diff --git a/splex.c b/splex.c index 44e513a..87a4c91 100644 --- a/splex.c +++ b/splex.c @@ -122,10 +122,10 @@ typedef struct { const char *session_name; char host[255]; bool read_pty; - const char *next_session; + char next_session[2]; } Server; -static Server server = { .running = true, .exit_status = -1, .host = "@localhost" }; +static Server server = { .running = true, .exit_status = -1, .host = "@localhost" , .next_session = { '\0', '\0' } }; static Client client; static struct termios orig_term, cur_term; static bool has_term, alternate_buffer, quiet; @@ -564,28 +564,37 @@ static bool set_next_session() { info("*siter %c\n",*siter); if (*siter == '\0') return false; - server.next_session = sname; + server.next_session[0] = *siter; return true; } static bool session_loop() { // Set initial session, or create a new one if (!set_next_session()) { - server.next_session = "0"; + server.next_session[0] = '0'; } // printf("%s\n",server.session_name); while (true) { - info("Iteration with session %s\n",server.next_session); server.session_name = server.next_session; - if (!session_alive(server.session_name)) + info("Iteration with session %s\n",server.next_session); + if (!session_alive(server.session_name)) { + info("Session not alive: %s",server.session_name); if (!create_session(server.session_name, shell_cmd)) die("create-session"); + } else { + info("Session alive: %s",server.session_name); + } + server.session_name = server.next_session; + info("server.socket > 0\n"); if (server.socket > 0) close(server.socket); + info("session_connect successful?\n"); if ((server.socket = session_connect(server.session_name)) == -1) return false; + info("session_set_socket_non_blocking successful?\n"); if (server_set_socket_non_blocking(server.socket) == -1) return false; + info("Passed all initial checks.\n"); struct sigaction sa; sa.sa_flags = 0; @@ -609,8 +618,11 @@ static bool session_loop() { } } else { info("session terminated with exit status %d", status); - if (!set_next_session()) + if (!set_next_session()){ + info("could not set next session"); exit(EXIT_SUCCESS); + } + info("set next session to %s",server.next_session); } } }