From 40da7ed5f74bb4ad3bbce81943622bc2cd9ab524 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Sun, 8 Aug 2010 21:17:57 +0200 Subject: [PATCH] Change check live connections check - show 'watch'. client_set_state only signals SESSION_WATCH_SHOW if client changes state from being active to inactive (and all clients in session are now inactive). --- src/client.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/client.c b/src/client.c index d9c2287..5a73db2 100644 --- a/src/client.c +++ b/src/client.c @@ -136,10 +136,14 @@ enum client_state client_get_state(struct client *cl) void client_set_state(struct client *cl, enum client_state st) { + int was_active = 0; + if (client_is_active(cl)) + was_active = 1; cl->state = st; - /* no need to check for all client being non-active if this one - already is. Note that session_active_clients also LOCKS session */ - if (!client_is_active(cl) && cl->session) + /* If client is going from being active to inactive and all clients + are now idle we fire a watch for the session . The assumption is + that session is not mutex locked if client is already active */ + if (was_active && !client_is_active(cl) && cl->session) { int no_active = session_active_clients(cl->session); if (no_active == 0) -- 1.7.10.4