X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fconnection.c;h=e765435e0e55248e0ef27bceb44302caab78b88a;hb=fc05a25c3100a114f64450604fc897c77c4f0db6;hp=cfa114613f64b798372d6a0c070b8c728bc0429c;hpb=70d61c514058eb5e6da0c8b2f436e89ea7d20b1d;p=pazpar2-moved-to-github.git diff --git a/src/connection.c b/src/connection.c index cfa1146..e765435 100644 --- a/src/connection.c +++ b/src/connection.c @@ -173,7 +173,6 @@ static void non_block_events(struct connection *co) 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 @@ -220,23 +219,22 @@ static void non_block_events(struct connection *co) 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); } } } void connection_continue(struct connection *co) { - non_block_events(co); + int r = ZOOM_connection_exec_task(co->link); + if (!r) + yaz_log(YLOG_WARN, "No task was executed for connection"); } static void connection_handler(IOCHAN iochan, int event) @@ -249,6 +247,7 @@ static void connection_handler(IOCHAN iochan, int event) /* 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 */ + yaz_log(YLOG_LOG, "timeout connection %p event=%d", co, event); connection_destroy(co); return; } @@ -414,7 +413,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); @@ -475,6 +474,9 @@ int client_prep_connection(struct client *cl, connection_release(co); client_set_connection(cl, co); co->client = cl; + /* ensure that connection is only assigned to this client + by marking the client non Idle */ + client_set_state(cl, Client_Working); yaz_mutex_leave(host->mutex); co->operation_timeout = operation_timeout; co->session_timeout = session_timeout;