X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fconnection.c;h=da7c1a5cdbb9df047cd647cc978b156c76b9abdb;hb=b9c889efbc310cfe669c497c8c5636ef9ad24934;hp=81705901b6863e02b9199ca66eb8f5046c21ff24;hpb=342d4f2a3eb9f281e4e7c20c5daa3432f8a321ef;p=pazpar2-moved-to-github.git diff --git a/src/connection.c b/src/connection.c index 8170590..da7c1a5 100644 --- a/src/connection.c +++ b/src/connection.c @@ -255,6 +255,8 @@ void connection_continue(struct connection *co) int r = ZOOM_connection_exec_task(co->link); if (!r) yaz_log(YLOG_WARN, "No task was executed for connection"); + iochan_setflags(co->iochan, ZOOM_connection_get_mask(co->link)); + iochan_setfd(co->iochan, ZOOM_connection_get_socket(co->link)); } static void connection_handler(IOCHAN iochan, int event) @@ -305,6 +307,12 @@ static void connection_handler(IOCHAN iochan, int event) non_block_events(co); client_unlock(cl); + + if (co->link) + { + iochan_setflags(iochan, ZOOM_connection_get_mask(co->link)); + iochan_setfd(iochan, ZOOM_connection_get_socket(co->link)); + } } } @@ -367,28 +375,6 @@ static struct host *connection_get_host(struct connection *con) return con->host; } -// Callback for use by event loop -// We do this because ZOOM connections don't always have (the same) sockets -static int socketfun(IOCHAN c) -{ - struct connection *co = iochan_getdata(c); - if (!co->link) - return -1; - return ZOOM_connection_get_socket(co->link); -} - -// Because ZOOM always knows what events it is interested in; we may not -static int maskfun(IOCHAN c) -{ - struct connection *co = iochan_getdata(c); - if (!co->link) - return 0; - - // This is cheating a little, and assuming that eventl mask IDs are always - // the same as ZOOM-C's. - return ZOOM_connection_get_mask(co->link); -} - static int connection_connect(struct connection *con, iochan_man_t iochan_man) { ZOOM_connection link = 0; @@ -451,8 +437,6 @@ static int connection_connect(struct connection *con, iochan_man_t iochan_man) con->state = Conn_Connecting; iochan_settimeout(con->iochan, con->operation_timeout); iochan_setdata(con->iochan, con); - iochan_setsocketfun(con->iochan, socketfun); - iochan_setmaskfun(con->iochan, maskfun); iochan_add(iochan_man, con->iochan); /* this fragment is bad DRY: from client_prep_connection */