projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into paz-927
[pazpar2-moved-to-github.git]
/
src
/
session.c
diff --git
a/src/session.c
b/src/session.c
index
69d05ae
..
b0d1bcf
100644
(file)
--- a/
src/session.c
+++ b/
src/session.c
@@
-508,7
+508,6
@@
static void select_targets_callback(struct session *se,
l->next = se->clients_cached;
se->clients_cached = l;
}
l->next = se->clients_cached;
se->clients_cached = l;
}
- /* set session always. If may be 0 if client is not active */
client_set_session(cl, se);
l = xmalloc(sizeof(*l));
client_set_session(cl, se);
l = xmalloc(sizeof(*l));
@@
-557,6
+556,7
@@
static void session_remove_cached_clients(struct session *se)
client_lock(l->client);
client_set_session(l->client, 0);
client_set_database(l->client, 0);
client_lock(l->client);
client_set_session(l->client, 0);
client_set_database(l->client, 0);
+ client_mark_dead(l->client);
client_unlock(l->client);
client_destroy(l->client);
xfree(l);
client_unlock(l->client);
client_destroy(l->client);
xfree(l);
@@
-746,17
+746,21
@@
enum pazpar2_error_code session_search(struct session *se,
int no_working = 0;
int no_failed_query = 0;
int no_failed_limit = 0;
int no_working = 0;
int no_failed_query = 0;
int no_failed_limit = 0;
- struct client_list *l, *l0;
-
- session_alert_watch(se, SESSION_WATCH_SHOW);
- session_alert_watch(se, SESSION_WATCH_BYTARGET);
- session_alert_watch(se, SESSION_WATCH_TERMLIST);
- session_alert_watch(se, SESSION_WATCH_SHOW_PREF);
+ struct client_list *l;
session_log(se, YLOG_DEBUG, "Search");
*addinfo = 0;
session_log(se, YLOG_DEBUG, "Search");
*addinfo = 0;
+ session_enter(se, "session_search0");
+ if (se->clients_starting)
+ {
+ session_leave(se, "session_search0");
+ return PAZPAR2_NO_ERROR;
+ }
+ se->clients_starting = 1;
+ session_leave(se, "session_search0");
+
if (se->settings_modified) {
session_remove_cached_clients(se);
}
if (se->settings_modified) {
session_remove_cached_clients(se);
}
@@
-784,6
+788,7
@@
enum pazpar2_error_code session_search(struct session *se,
if (!live_channels)
{
session_leave(se, "session_search");
if (!live_channels)
{
session_leave(se, "session_search");
+ se->clients_starting = 0;
return PAZPAR2_NO_TARGETS;
}
return PAZPAR2_NO_TARGETS;
}
@@
-793,14
+798,18
@@
enum pazpar2_error_code session_search(struct session *se,
{
*addinfo = "limit";
session_leave(se, "session_search");
{
*addinfo = "limit";
session_leave(se, "session_search");
+ se->clients_starting = 0;
return PAZPAR2_MALFORMED_PARAMETER_VALUE;
}
return PAZPAR2_MALFORMED_PARAMETER_VALUE;
}
- l0 = se->clients_active;
- se->clients_active = 0;
session_leave(se, "session_search");
session_leave(se, "session_search");
- for (l = l0; l; l = l->next)
+ session_alert_watch(se, SESSION_WATCH_SHOW);
+ session_alert_watch(se, SESSION_WATCH_BYTARGET);
+ session_alert_watch(se, SESSION_WATCH_TERMLIST);
+ session_alert_watch(se, SESSION_WATCH_SHOW_PREF);
+
+ for (l = se->clients_active; l; l = l->next)
{
int parse_ret;
struct client *cl = l->client;
{
int parse_ret;
struct client *cl = l->client;
@@
-823,8
+832,9
@@
enum pazpar2_error_code session_search(struct session *se,
no_working++;
}
}
no_working++;
}
}
- session_reset_active_clients(se, l0);
-
+ session_enter(se, "session_search2");
+ se->clients_starting = 0;
+ session_leave(se, "session_search2");
if (no_working == 0)
{
if (no_failed_query > 0)
if (no_working == 0)
{
if (no_failed_query > 0)
@@
-1004,6
+1014,7
@@
struct session *new_session(NMEM nmem, struct conf_service *service,
session->facet_limits = 0;
session->mergekey = 0;
session->rank = 0;
session->facet_limits = 0;
session->mergekey = 0;
session->rank = 0;
+ session->clients_starting = 0;
for (i = 0; i <= SESSION_WATCH_MAX; i++)
{
for (i = 0; i <= SESSION_WATCH_MAX; i++)
{