X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=1f0cd79709297ba86c9754d0d470a2ab05abe7be;hb=e2ac4b875fbaf0211beae88ef6ccda2f2a4a3e95;hp=03d0e55d70187c81ee8c78cc91e595ce3407f6c6;hpb=aabf01d7516f121a50438dcfae14ecf8c351a8c8;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index 03d0e55..1f0cd79 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.114 2007-02-21 12:53:01 adam Exp $ + * $Id: zoom-c.c,v 1.116 2007-03-12 08:27:44 adam Exp $ */ /** * \file zoom-c.c @@ -37,6 +37,7 @@ typedef enum { zoom_complete } zoom_ret; +static void resultset_destroy(ZOOM_resultset r); static zoom_ret ZOOM_connection_send_init(ZOOM_connection c); static zoom_ret do_write_ex(ZOOM_connection c, char *buf_out, int len_out); static char *cql2pqf(ZOOM_connection c, const char *cql); @@ -282,12 +283,12 @@ void ZOOM_connection_remove_task(ZOOM_connection c) switch (task->which) { case ZOOM_TASK_SEARCH: - ZOOM_resultset_destroy(task->u.search.resultset); + resultset_destroy(task->u.search.resultset); xfree(task->u.search.syntax); xfree(task->u.search.elementSetName); break; case ZOOM_TASK_RETRIEVE: - ZOOM_resultset_destroy(task->u.retrieve.resultset); + resultset_destroy(task->u.retrieve.resultset); xfree(task->u.retrieve.syntax); xfree(task->u.retrieve.elementSetName); break; @@ -300,7 +301,7 @@ void ZOOM_connection_remove_task(ZOOM_connection c) ZOOM_package_destroy(task->u.package); break; case ZOOM_TASK_SORT: - ZOOM_resultset_destroy(task->u.sort.resultset); + resultset_destroy(task->u.sort.resultset); ZOOM_query_destroy(task->u.sort.q); break; default: @@ -432,7 +433,7 @@ ZOOM_API(void) initlog(); yaz_log(log_api, "%p ZOOM_connection_connect host=%s portnum=%d", - c, host, portnum); + c, host ? host : "null", portnum); set_ZOOM_error(c, ZOOM_ERROR_NONE, 0); ZOOM_connection_remove_tasks(c); @@ -474,15 +475,18 @@ ZOOM_API(void) else c->lang = 0; - xfree(c->host_port); - if (portnum) + if (host) { - char hostn[128]; - sprintf(hostn, "%.80s:%d", host, portnum); - c->host_port = xstrdup(hostn); - } - else - c->host_port = xstrdup(host); + xfree(c->host_port); + if (portnum) + { + char hostn[128]; + sprintf(hostn, "%.80s:%d", host, portnum); + c->host_port = xstrdup(hostn); + } + else + c->host_port = xstrdup(host); + } { /* @@ -936,6 +940,11 @@ ZOOM_API(void) ZOOM_API(void) ZOOM_resultset_destroy(ZOOM_resultset r) { + resultset_destroy(r); +} + +static void resultset_destroy(ZOOM_resultset r) +{ if (!r) return; (r->refcount)--; @@ -988,12 +997,18 @@ static void do_close(ZOOM_connection c) static int ZOOM_test_reconnect(ZOOM_connection c) { + ZOOM_Event event; + if (!c->reconnect_ok) return 0; do_close(c); c->reconnect_ok = 0; c->tasks->running = 0; ZOOM_connection_insert_task(c, ZOOM_TASK_CONNECT); + + event = ZOOM_Event_create(ZOOM_EVENT_CONNECT); + ZOOM_connection_put_event(c, event); + return 1; } @@ -1285,7 +1300,7 @@ static zoom_ret ZOOM_connection_send_init(ZOOM_connection c) odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.114 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.116 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = @@ -3779,11 +3794,7 @@ static int do_read(ZOOM_connection c) return 0; if (r <= 0) { - if (ZOOM_test_reconnect(c)) - { - yaz_log(log_details, "%p do_read reconnect read", c); - } - else + if (!ZOOM_test_reconnect(c)) { set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, c->host_port); do_close(c); @@ -4074,12 +4085,7 @@ static void ZOOM_connection_do_io(ZOOM_connection c, int mask) { if (mask & ZOOM_SELECT_EXCEPT) { - if (ZOOM_test_reconnect(c)) - { - event = ZOOM_Event_create(ZOOM_EVENT_CONNECT); - ZOOM_connection_put_event(c, event); - } - else + if (!ZOOM_test_reconnect(c)) { set_ZOOM_error(c, ZOOM_ERROR_CONNECTION_LOST, c->host_port); do_close(c);