winbindd: keep client list sorted by access time
authorUri Simchoni <urisimchoni@gmail.com>
Mon, 13 Jul 2015 18:33:41 +0000 (21:33 +0300)
committerJeremy Allison <jra@samba.org>
Wed, 15 Jul 2015 20:41:13 +0000 (22:41 +0200)
Keep client list sorted by last access time, newest
to oldest.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11397

Signed-off-by: Uri Simchoni <urisimchoni@gmail.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/winbindd/winbindd.c
source3/winbindd/winbindd_util.c

index 66ea68bac9b18d5e405a905f608f7eac9abfc1f6..620fd3fb8b6caf449326d9b190950b687c09b27d 100644 (file)
@@ -701,7 +701,8 @@ static void process_request(struct winbindd_cli_state *state)
 
        state->cmd_name = "unknown request";
        state->recv_fn = NULL;
-       state->last_access = time(NULL);
+       /* client is newest */
+       winbindd_promote_client(state);
 
        /* Process command */
 
@@ -930,8 +931,6 @@ static void new_connection(int listen_sock, bool privileged)
                return;
        }
 
-       state->last_access = time(NULL);        
-
        state->privileged = privileged;
 
        req = wb_req_read_send(state, winbind_event_context(), state->sock,
index 0108504e72ab532cc4ffbc4429cc49f779999724..233b5c97fa8977470a3bd6dcd9333736c33b9490 100644 (file)
@@ -1225,6 +1225,7 @@ winbindd_client_list_prev(struct winbindd_cli_state *cli)
 
 void winbindd_add_client(struct winbindd_cli_state *cli)
 {
+       cli->last_access = time(NULL);
        DLIST_ADD(_client_list, cli);
        _num_clients++;
 }
@@ -1241,6 +1242,7 @@ void winbindd_remove_client(struct winbindd_cli_state *cli)
 
 void winbindd_promote_client(struct winbindd_cli_state *cli)
 {
+       cli->last_access = time(NULL);
        DLIST_PROMOTE(_client_list, cli);
 }