Also rename session->clients to session->clients_active.
l = xmalloc(sizeof(*l));
l->client = cl;
l = xmalloc(sizeof(*l));
l->client = cl;
- l->next = se->clients;
- se->clients = l;
+ l->next = se->clients_active;
+ se->clients_active = l;
-static void session_remove_clients(struct session *se)
+static void session_reset_active_clients(struct session *se,
+ struct client_list *new_list)
{
struct client_list *l;
session_enter(se);
{
struct client_list *l;
session_enter(se);
- l = se->clients;
- se->clients = 0;
+ l = se->clients_active;
+ se->clients_active = new_list;
session_leave(se);
while (l)
session_leave(se);
while (l)
- session_remove_clients(se);
+ session_reset_active_clients(se, 0);
session_enter(se);
l = se->clients_cached;
session_enter(se);
l = se->clients_cached;
struct client_list *l;
int res = 0;
struct client_list *l;
int res = 0;
- for (l = s->clients; l; l = l->next)
+ for (l = s->clients_active; l; l = l->next)
if (client_is_active(l->client))
res++;
if (client_is_active(l->client))
res++;
struct client_list *l;
int res = 0;
struct client_list *l;
int res = 0;
- for (l = s->clients; l; l = l->next)
+ for (l = s->clients_active; l; l = l->next)
if (client_is_active_preferred(l->client))
res++;
session_log(s, YLOG_DEBUG, "Has %d active preferred clients.", res);
if (client_is_active_preferred(l->client))
res++;
session_log(s, YLOG_DEBUG, "Has %d active preferred clients.", res);
sr->next = se->sorted_results;
se->sorted_results = sr;
sr->next = se->sorted_results;
se->sorted_results = sr;
- for (l = se->clients; l; l = l->next)
+ for (l = se->clients_active; l; l = l->next)
{
struct client *cl = l->client;
const char *strategy_plus_sort = get_strategy_plus_sort(cl, field);
{
struct client *cl = l->client;
const char *strategy_plus_sort = get_strategy_plus_sort(cl, field);
int live_channels = 0;
int no_working = 0;
int no_failed = 0;
int live_channels = 0;
int no_working = 0;
int no_failed = 0;
+ struct client_list *l, *l0;
struct timeval tval;
facet_limits_t facet_limits;
struct timeval tval;
facet_limits_t facet_limits;
if (se->settings_modified)
session_remove_cached_clients(se);
else
if (se->settings_modified)
session_remove_cached_clients(se);
else
- session_remove_clients(se);
+ session_reset_active_clients(se, 0);
session_enter(se);
reclist_destroy(se->reclist);
session_enter(se);
reclist_destroy(se->reclist);
session_leave(se);
return PAZPAR2_MALFORMED_PARAMETER_VALUE;
}
session_leave(se);
return PAZPAR2_MALFORMED_PARAMETER_VALUE;
}
- for (l = se->clients; l; l = l->next)
+
+ l0 = se->clients_active;
+ se->clients_active = 0;
+ session_leave(se);
+
+ for (l = l0; l; l = l->next)
{
int parse_ret;
struct client *cl = l->client;
{
int parse_ret;
struct client *cl = l->client;
se->service->server->iochan_man,
&tval))
{
se->service->server->iochan_man,
&tval))
{
}
}
}
facet_limits_destroy(facet_limits);
}
}
}
facet_limits_destroy(facet_limits);
+ session_reset_active_clients(se, l0);
+
if (no_working == 0)
{
if (no_failed > 0)
if (no_working == 0)
{
if (no_failed > 0)
session->number_of_warnings_unknown_metadata = 0;
session->num_termlists = 0;
session->reclist = 0;
session->number_of_warnings_unknown_metadata = 0;
session->num_termlists = 0;
session->reclist = 0;
+ session->clients_active = 0;
session->clients_cached = 0;
session->settings_modified = 0;
session->session_nmem = nmem;
session->clients_cached = 0;
session->settings_modified = 0;
session->session_nmem = nmem;
struct client_list *l;
size_t sz = 0;
struct client_list *l;
size_t sz = 0;
- for (l = se->clients; l; l = l->next)
+ for (l = se->clients_active; l; l = l->next)
sz++;
res = nmem_malloc(nmem, sizeof(*res) * sz);
*count = 0;
sz++;
res = nmem_malloc(nmem, sizeof(*res) * sz);
*count = 0;
- for (l = se->clients; l; l = l->next)
+ for (l = se->clients_active; l; l = l->next)
{
struct client *cl = l->client;
WRBUF w = wrbuf_alloc();
{
struct client *cl = l->client;
WRBUF w = wrbuf_alloc();
*total = reclist_get_num_records(se->reclist);
*sumhits = 0;
*total = reclist_get_num_records(se->reclist);
*sumhits = 0;
- for (l = se->clients; l; l = l->next)
+ for (l = se->clients_active; l; l = l->next)
*sumhits += client_get_hits(l->client);
for (i = 0; i < start; i++)
*sumhits += client_get_hits(l->client);
for (i = 0; i < start; i++)
memset(stat, 0, sizeof(*stat));
stat->num_hits = 0;
memset(stat, 0, sizeof(*stat));
stat->num_hits = 0;
- for (l = se->clients; l; l = l->next)
+ for (l = se->clients_active; l; l = l->next)
{
struct client *cl = l->client;
if (!client_get_connection(cl))
{
struct client *cl = l->client;
if (!client_get_connection(cl))
struct session {
struct conf_service *service; /* service in use for this session */
struct session_database *databases; // All databases, settings overriden
struct session {
struct conf_service *service; /* service in use for this session */
struct session_database *databases; // All databases, settings overriden
- struct client_list *clients; // Clients connected for current search
+ struct client_list *clients_active; // Clients connected for current search
struct client_list *clients_cached; // Clients in cache
NMEM session_nmem; // Nmem for session-permanent storage
NMEM nmem; // Nmem for each operation (i.e. search, result set, etc)
struct client_list *clients_cached; // Clients in cache
NMEM session_nmem; // Nmem for session-permanent storage
NMEM nmem; // Nmem for each operation (i.e. search, result set, etc)