{
struct session *se = cl->session;
- session_enter_ro(se, "client_check_preferred_watch");
yaz_log(YLOG_DEBUG, "client_check_preferred_watch: %s ", client_get_id(cl));
if (se)
{
else
yaz_log(YLOG_WARN, "client_check_preferred_watch: %s. No session!", client_get_id(cl));
- session_leave_ro(se, "client_check_preferred_watch");
}
struct suggestions* client_suggestions_create(const char* suggestions_string);
const char *error, *addinfo = 0;
- session_enter_rw(cl->session, "client_search_response");
if (ZOOM_connection_error(link, &error, &addinfo))
{
cl->hits = 0;
client_suggestions_destroy(cl);
cl->suggestions = client_suggestions_create(ZOOM_resultset_option_get(resultset, "suggestions"));
}
- session_leave_rw(cl->session, "client_search_response");
}
void client_got_records(struct client *cl)
{
struct session *se = cl->session;
- session_enter_ro(se, "client_got_records");
if (reclist_get_num_records(se->reclist) > 0)
{
session_alert_watch(se, SESSION_WATCH_SHOW);
session_alert_watch(se, SESSION_WATCH_TERMLIST);
session_alert_watch(se, SESSION_WATCH_RECORD);
}
- session_leave_ro(se, "client_got_records");
}
static void client_record_ingest(struct client *cl)
ZOOM_resultset resultset = cl->resultset;
const char *error, *addinfo;
- session_enter_rw(cl->session, "client_record_response");
if (ZOOM_connection_error(link, &error, &addinfo))
{
client_set_state(cl, Client_Error);
*got_records = 1;
}
}
- session_leave_rw(cl->session, "client_record_response");
}
int client_reingest(struct client *cl)
return co;
}
-static void non_block_events(struct connection *co)
+static void non_block_events_unlocked(struct connection *co)
{
int got_records = 0;
IOCHAN iochan = co->iochan;
}
}
+static void non_block_events(struct client *cl, struct connection *co)
+{
+ session_enter_rw(client_get_session(cl), "non_block_events");
+ non_block_events_unlocked(co);
+ session_leave_rw(client_get_session(cl), "non_block_events");
+}
+
void connection_continue(struct connection *co)
{
int r = ZOOM_connection_exec_task(co->link);
if (!r)
- non_block_events(co);
+ {
+ non_block_events_unlocked(co);
+ }
else
{
iochan_setflags(co->iochan, ZOOM_connection_get_mask(co->link));
{
ZOOM_connection_fire_event_timeout(co->link);
- non_block_events(co);
+ non_block_events(cl, co);
remove_connection_from_host(co);
yaz_mutex_leave(host->mutex);
{
yaz_mutex_leave(host->mutex);
- non_block_events(co);
+ non_block_events(cl, co);
ZOOM_connection_fire_event_socket(co->link, event);
- non_block_events(co);
+ non_block_events(cl, co);
if (co->link)
{
if (!s)
return;
- session_enter_ro(s->psession, "show_records");
// We haven't counted clients yet if we're called on a block release
if (active < 0)
active = session_active_clients(s->psession);
if (!(sp = reclist_parse_sortparms(c->nmem, sort, service)))
{
error(rs, PAZPAR2_MALFORMED_PARAMETER_VALUE, "sort");
- session_leave_ro(s->psession, "show_records");
return;
}
}
show_range_stop(s->psession, rl);
- session_leave_ro(s->psession, "show_records");
response_close(c, "show");
}
}
}
}
+ session_enter_ro(s->psession, "show_records");
show_records(c, s, status);
+ session_leave_ro(s->psession, "show_records");
release_session(c, s);
}