diff --git a/abduco.c b/abduco.c index 3770a6c..6c58a27 100644 --- a/abduco.c +++ b/abduco.c @@ -92,7 +92,6 @@ struct Client { typedef struct { Client *clients; - int client_count; int socket; Packet pty_output; int pty; diff --git a/client.c b/client.c index cf9a68f..b60d326 100644 --- a/client.c +++ b/client.c @@ -68,6 +68,9 @@ static int client_mainloop() { case MSG_CONTENT: write_all(STDOUT_FILENO, pkt.u.msg, pkt.len); break; + case MSG_RESIZE: + client.need_resize = true; + break; case MSG_EXIT: return pkt.u.i; } diff --git a/server.c b/server.c index 2278f5b..af5313c 100644 --- a/server.c +++ b/server.c @@ -70,7 +70,6 @@ static Client *server_accept_client() { c->state = STATE_CONNECTED; c->next = server.clients; server.clients = c; - server.client_count++; return c; } @@ -188,11 +187,16 @@ static void server_mainloop() { for (Client **prev_next = &server.clients, *c = server.clients; c;) { if (c->state == STATE_DISCONNECTED) { + bool first = (c == server.clients); Client *t = c->next; client_free(c); *prev_next = c = t; - if (--server.client_count == 0) + if (first && server.clients) { + Packet pkt = { .type = MSG_RESIZE, .len = 0 }; + server_send_packet(server.clients, &pkt); + } else if (!server.clients) { server_mark_socket_exec(false); + } continue; }