=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server-fn.c,v retrieving revision 1.18 retrieving revision 1.19 diff -c -r1.18 -r1.19 *** src/usr.bin/tmux/server-fn.c 2009/09/05 17:42:16 1.18 --- src/usr.bin/tmux/server-fn.c 2009/09/12 13:01:19 1.19 *************** *** 1,4 **** ! /* $OpenBSD: server-fn.c,v 1.18 2009/09/05 17:42:16 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server-fn.c,v 1.19 2009/09/12 13:01:19 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 272,281 **** { struct session *s; struct winlink *wl; ! struct client *c; ! u_int i, j; ! int destroyed; ! for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { s = ARRAY_ITEM(&sessions, i); --- 272,278 ---- { struct session *s; struct winlink *wl; ! u_int i; for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { s = ARRAY_ITEM(&sessions, i); *************** *** 284,303 **** if ((wl = winlink_find_by_window(&s->windows, w)) == NULL) continue; ! destroyed = session_detach(s, wl); ! for (j = 0; j < ARRAY_LENGTH(&clients); j++) { ! c = ARRAY_ITEM(&clients, j); ! if (c == NULL || c->session != s) ! continue; ! ! if (destroyed) { ! c->session = NULL; ! server_write_client(c, MSG_EXIT, NULL, 0); ! } else ! server_redraw_client(c); ! } } recalculate_sizes(); } void --- 281,307 ---- if ((wl = winlink_find_by_window(&s->windows, w)) == NULL) continue; ! if (session_detach(s, wl)) ! server_destroy_session(s); ! else ! server_redraw_session(s); } recalculate_sizes(); + } + + void + server_destroy_session(struct session *s) + { + struct client *c; + u_int i; + + for (i = 0; i < ARRAY_LENGTH(&clients); i++) { + c = ARRAY_ITEM(&clients, i); + if (c == NULL || c->session != s) + continue; + c->session = NULL; + server_write_client(c, MSG_EXIT, NULL, 0); + } } void