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));
else if (event & EVENT_TIMEOUT)
{
ZOOM_connection_fire_event_timeout(co->link);
- client_lock(cl);
- non_block_events(co);
- client_unlock(cl);
remove_connection_from_host(co);
yaz_mutex_leave(host->mutex);
{
yaz_mutex_leave(host->mutex);
- client_lock(cl);
- non_block_events(co);
+ non_block_events(cl, co);
ZOOM_connection_fire_event_socket(co->link, event);
- non_block_events(co);
- client_unlock(cl);
+ non_block_events(cl, co);
if (co->link)
{