+ struct client *cl = l->client;
+ // Assume no re-search is required.
+ client_parse_init(cl, 1);
+ clients_research += client_parse_sort(cl, sp);
+ }
+ if (!clients_research || se->clients_starting)
+ {
+ // A new sorting based on same record set
+ struct reclist_sortparms *sr = nmem_malloc(se->nmem, sizeof(*sr));
+ sr->name = nmem_strdup(se->nmem, field);
+ sr->increasing = increasing;
+ sr->type = type;
+ sr->next = se->sorted_results;
+ se->sorted_results = sr;
+ session_log(se, YLOG_DEBUG, "session_sort: no research/ingesting done");
+ session_leave(se, "session_sort");
+ }
+ else
+ {
+ se->clients_starting = 1;
+ session_log(se, YLOG_DEBUG,
+ "session_sort: reset results due to %d clients researching",
+ clients_research);
+ session_clear_set(se, sp);
+ session_log(se, YLOG_DEBUG, "Re- search/ingesting for clients due to change in sort order");
+
+ session_leave(se, "session_sort");
+ for (l = se->clients_active; l; l = l->next)
+ {
+ struct client *cl = l->client;
+ if (client_get_state(cl) == Client_Connecting ||
+ client_get_state(cl) == Client_Idle ||
+ client_get_state(cl) == Client_Working) {
+ client_start_search(cl);
+ }
+ else
+ {
+ session_log(se, YLOG_DEBUG,
+ "session_sort: %s: No re-start/ingest in show. "
+ "Wrong client state: %d",
+ client_get_id(cl), client_get_state(cl));
+ }
+ }
+ session_enter(se, "session_sort");
+ se->clients_starting = 0;
+ session_leave(se, "session_sort");
+ }
+}
+
+void session_stop(struct session *se)
+{
+ struct client_list *l;
+ session_enter(se, "session_stop1");
+ if (se->clients_starting)
+ {
+ session_leave(se, "session_stop1");