X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fzoom-c.c;h=40919491420a6f178e82cd59f3918ff87af4dcec;hp=e662615fcd3e00c7a8f1ea78053212f0c19b6bd7;hb=5b4b18489c74c31ef915fef72621e8dcbfb4cdb3;hpb=6244022fc260d3f35804ed690b1b2a4a466d0e51 diff --git a/src/zoom-c.c b/src/zoom-c.c index e662615..4091949 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -796,13 +796,18 @@ static zoom_ret do_write(ZOOM_connection c); ZOOM_API(void) ZOOM_connection_destroy(ZOOM_connection c) { +#if ZOOM_RESULT_LISTS ZOOM_resultsets list; +#else + ZOOM_resultset r; +#endif if (!c) return; yaz_log(log_api, "%p ZOOM_connection_destroy", c); if (c->cs) cs_close(c->cs); +#if ZOOM_RESULT_LISTS // Remove the connection's usage of resultsets list = c->resultsets; while (list) { @@ -811,6 +816,10 @@ ZOOM_API(void) list = list->next; xfree(removed); } +#else + for (r = c->resultsets; r; r = r->next) + r->connection = 0; +#endif xfree(c->buf_in); xfree(c->addinfo); @@ -906,7 +915,9 @@ ZOOM_API(ZOOM_resultset) const char *cp; int start, count; const char *syntax, *elementSetName; +#if ZOOM_RESULT_LISTS ZOOM_resultsets set; +#endif yaz_log(log_api, "%p ZOOM_connection_search set %p query %p", c, r, q); r->r_sort_spec = q->sort_spec; @@ -935,13 +946,17 @@ ZOOM_API(ZOOM_resultset) r->connection = c; +#if ZOOM_RESULT_LISTS yaz_log(log_details, "%p ZOOM_connection_search: Adding new resultset (%p) to resultsets (%p) ", c, r, c->resultsets); set = xmalloc(sizeof(*set)); ZOOM_resultset_addref(r); set->resultset = r; set->next = c->resultsets; c->resultsets = set; - +#else + r->next = c->resultsets; + c->resultsets = r; +#endif if (c->host_port && c->proto == PROTO_HTTP) { if (!c->cs) @@ -1091,6 +1106,24 @@ static void resultset_destroy(ZOOM_resultset r) yaz_log(log_details, "%p ZOOM_connection resultset_destroy: Deleting resultset (%p) ", r->connection, r); ZOOM_resultset_cache_reset(r); +#if ZOOM_RESULT_LISTS +#else + if (r->connection) + { + /* remove ourselves from the resultsets in connection */ + ZOOM_resultset *rp = &r->connection->resultsets; + while (1) + { + assert(*rp); /* we must be in this list!! */ + if (*rp == r) + { /* OK, we're here - take us out of it */ + *rp = (*rp)->next; + break; + } + rp = &(*rp)->next; + } + } +#endif ZOOM_query_destroy(r->query); ZOOM_options_destroy(r->options); odr_destroy(r->odr); @@ -1762,6 +1795,7 @@ static zoom_ret ZOOM_connection_send_search(ZOOM_connection c) result sets on the server. */ for (ord = 1; ; ord++) { +#if ZOOM_RESULT_LISTS ZOOM_resultsets rsp; sprintf(setname, "%d", ord); for (rsp = c->resultsets; rsp; rsp = rsp->next) @@ -1769,6 +1803,16 @@ static zoom_ret ZOOM_connection_send_search(ZOOM_connection c) break; if (!rsp) break; +#else + ZOOM_resultset rp; + sprintf(setname, "%d", ord); + for (rp = c->resultsets; rp; rp = rp->next) + if (rp->setname && !strcmp(rp->setname, setname)) + break; + if (!rp) + break; +#endif + } r->setname = xstrdup(setname); yaz_log(log_details, "%p ZOOM_connection_send_search: allocating "