"Client_Disconnected"
};
-static void client_enter(struct client *cl)
-{
- yaz_mutex_enter(cl->mutex);
-}
-
-static void client_leave(struct client *cl)
-{
- yaz_mutex_leave(cl->mutex);
-}
-
-
const char *client_get_state_str(struct client *cl)
{
return client_states[cl->state];
client_show_raw_dequeue(cl);
}
-static void search_response(struct client *cl)
+void client_search_response(struct client *cl)
{
struct connection *co = cl->connection;
struct session *se = cl->session;
}
}
-void client_search_response(struct client *cl)
-{
- search_response(cl);
-}
-
-static void record_response(struct client *cl)
+void client_record_response(struct client *cl)
{
struct connection *co = cl->connection;
ZOOM_connection link = connection_get_link(co);
}
}
-void client_record_response(struct client *cl)
-{
- record_response(cl);
-}
-
void client_start_search(struct client *cl)
{
struct session_database *sdb = client_get_database(cl);
c->pquery = 0;
xfree(c->cqlquery);
c->cqlquery = 0;
- c->hits = 12345678;
-#if 0
- if (c->connection)
- connection_release(c->connection);
-#endif
ZOOM_resultset_destroy(c->resultset);
yaz_mutex_destroy(&c->mutex);
xfree(c);
void client_remove_from_session(struct client *c)
{
- struct session *se = c->session;
-
+ struct session *se;
+ client_incref(c);
+
+ se = c->session;
assert(se);
if (se)
{
c->session = 0;
c->next = 0;
}
+ client_destroy(c);
}
void client_set_session(struct client *cl, struct session *se)
void client_set_maxrecs(struct client *cl, int v);
void client_set_startrecs(struct client *cl, int v);
void client_remove_from_session(struct client *c);
+void client_incref(struct client *c);
#endif
static void non_block_events(struct connection *co)
{
- struct client *cl = co->client;
IOCHAN iochan = co->iochan;
ZOOM_connection link = co->link;
while (1)
{
+ struct client *cl = co->client;
int ev;
int r = ZOOM_event_nonblock(1, &link);
if (!r)
break;
+ if (!cl)
+ continue;
ev = ZOOM_connection_last_event(link);
+
+ client_incref(cl);
#if 0
yaz_log(YLOG_LOG, "ZOOM_EVENT_%s", ZOOM_get_event_str(ev));
#endif
yaz_log(YLOG_LOG, "Unhandled event (%d) from %s",
ev, client_get_url(cl));
}
+ client_destroy(cl);
}
}