X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fconnection.c;h=fecf51b9fd7f4a04278ae7f5e32f64cdfb1704d9;hb=15934c78c0fbb37a04f1a7a225a1cdee9854b257;hp=196a3976e5196e18c749d75850b2ff3f5fcc34fc;hpb=ce83afcc8705467f318609f6a848b1d023d31a46;p=pazpar2-moved-to-github.git diff --git a/src/connection.c b/src/connection.c index 196a397..fecf51b 100644 --- a/src/connection.c +++ b/src/connection.c @@ -79,7 +79,7 @@ static int connection_is_idle(struct connection *co) if (!ZOOM_connection_is_idle(link)) return 0; event = ZOOM_connection_peek_event(link); - if (event == ZOOM_EVENT_NONE || event == ZOOM_EVENT_END) + if (event == ZOOM_EVENT_NONE) return 1; else return 0; @@ -159,16 +159,21 @@ static struct connection *connection_create(struct client *cl, static void non_block_events(struct connection *co) { - struct client *cl = co->client; + int got_records = 0; 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 @@ -209,11 +214,23 @@ static void non_block_events(struct connection *co) break; case ZOOM_EVENT_RECV_RECORD: client_record_response(cl); + got_records = 1; break; default: yaz_log(YLOG_LOG, "Unhandled event (%d) from %s", ev, client_get_url(cl)); } + client_destroy(cl); + } + if (got_records) + { + struct client *cl = co->client; + if (cl) + { + client_incref(cl); + client_got_records(cl); + client_destroy(cl); + } } } @@ -397,7 +414,7 @@ static int connection_connect(struct connection *con, iochan_man_t iochan_man) ZOOM_connection_connect(link, host->ipport, 0); con->link = link; - con->iochan = iochan_create(0, connection_handler, 0); + con->iochan = iochan_create(0, connection_handler, 0, "connection_socket"); con->state = Conn_Connecting; iochan_settimeout(con->iochan, con->operation_timeout); iochan_setdata(con->iochan, con);