}
yaz_log(YLOG_DEBUG, "Connection destroy %s", co->host->hostport);
- remove_connection_from_host(co);
if (co->client)
{
client_disconnect(co->client);
}
+
+ remove_connection_from_host(co);
xfree(co->zproxy);
xfree(co);
}
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);
}
}
{
struct connection *co = iochan_getdata(iochan);
struct client *cl = co->client;
- struct session *se = 0;
- if (cl)
- se = client_get_session(cl);
- else
+ if (!cl)
{
+ /* no client associated with it.. We are probably getting
+ a closed connection from the target.. Or, perhaps, an unexpected
+ package.. We will just close the connection */
connection_destroy(co);
return;
}
-
if (event & EVENT_TIMEOUT)
{
if (co->state == Conn_Connecting)
iochan_man_t iochan_man)
{
struct connection *co;
- struct session *se = client_get_session(cl);
struct host *host = client_get_host(cl);
struct session_database *sdb = client_get_database(cl);
const char *zproxy = session_setting_oneval(sdb, PZ_ZPROXY);