diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-08-27 15:28:07 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-08-27 15:28:07 +0000 |
commit | 438144692dba1aabd34d3253be61b461f15e5e6d (patch) | |
tree | 369daf30feaf63f41f2f32c45fa76f30f6870eae /server.c | |
parent | 8dbccbc4dbafbac0cee008f6e93cf022fdb7b515 (diff) | |
download | rtmux-438144692dba1aabd34d3253be61b461f15e5e6d.tar.gz rtmux-438144692dba1aabd34d3253be61b461f15e5e6d.tar.bz2 rtmux-438144692dba1aabd34d3253be61b461f15e5e6d.zip |
Flush even detached sessions.
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 28 |
1 files changed, 13 insertions, 15 deletions
@@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.6 2007-08-27 13:45:26 nicm Exp $ */ +/* $Id: server.c,v 1.7 2007-08-27 15:28:07 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -658,31 +658,29 @@ lost_window(struct window *w) struct client *c; struct session *s; u_int i, j; + int destroyed; - for (i = 0; i < ARRAY_LENGTH(&clients); i++) { - c = ARRAY_ITEM(&clients, i); - if (c == NULL || c->session == NULL) + for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { + s = ARRAY_ITEM(&sessions, i); + if (s == NULL) continue; - if (!session_has(c->session, w)) + if (!session_has(s, w)) continue; - s = c->session; /* Detach window from session. */ session_detach(s, w); - /* Try to flush session and redraw if not destroyed. */ - if (session_flush(s) == 0) { - changed_window(c); - continue; - } - - /* Kill all clients attached to this session. */ + /* Try to flush session and either redraw or kill clients. */ + destroyed = session_flush(s); for (j = 0; j < ARRAY_LENGTH(&clients); j++) { c = ARRAY_ITEM(&clients, j); if (c == NULL || c->session != s) continue; - c->session = NULL; - write_client(c, MSG_EXIT, NULL, 0); + if (destroyed) { + c->session = NULL; + write_client(c, MSG_EXIT, NULL, 0); + } else + changed_window(c); } } } |