X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fclient.c;h=4c6c78084f7309c1df3cab5ae93e26d24539a1e3;hb=e2e3d26515221c3ddc8968393716e68662c588ce;hp=e70a08e6445b15a63db726d059f013416c7fd4bd;hpb=70b88d6e85b42debc319af76d89979a0f058e429;p=pazpar2-moved-to-github.git diff --git a/src/client.c b/src/client.c index e70a08e..4c6c780 100644 --- a/src/client.c +++ b/src/client.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2009 Index Data + Copyright (C) 2006-2010 Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -58,7 +58,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #endif -#include "pazpar2.h" +#include "session.h" #include "parameters.h" #include "client.h" #include "connection.h" @@ -72,7 +72,7 @@ struct client { struct session *session; char *pquery; // Current search char *cqlquery; // used for SRU targets only - int hits; + Odr_int hits; int record_offset; int maxrecs; int startrecs; @@ -104,8 +104,6 @@ static const char *client_states[] = { "Client_Disconnected" }; -static struct client *client_freelist = 0; /* thread pr */ - const char *client_get_state_str(struct client *cl) { return client_states[cl->state]; @@ -457,13 +455,14 @@ void client_record_response(struct client *cl) else { struct session_database *sdb = client_get_database(cl); + NMEM nmem = nmem_create(); const char *xmlrec; char type[80]; if (nativesyntax_to_type(sdb, type, rec)) yaz_log(YLOG_WARN, "Failed to determine record type"); if ((xmlrec = ZOOM_record_get(rec, type, NULL))) { - if (ingest_record(cl, xmlrec, cl->record_offset)) + if (!ingest_record(cl, xmlrec, cl->record_offset, nmem)) { session_alert_watch(cl->session, SESSION_WATCH_SHOW); session_alert_watch(cl->session, SESSION_WATCH_RECORD); @@ -473,6 +472,7 @@ void client_record_response(struct client *cl) } else yaz_log(YLOG_WARN, "Failed to extract ZOOM record"); + nmem_destroy(nmem); } } @@ -562,14 +562,7 @@ void client_start_search(struct client *cl) struct client *client_create(void) { - struct client *r; - if (client_freelist) - { - r = client_freelist; - client_freelist = client_freelist->next; - } - else - r = xmalloc(sizeof(struct client)); + struct client *r = xmalloc(sizeof(*r)); r->maxrecs = 100; r->startrecs = 0; r->pquery = 0; @@ -607,9 +600,7 @@ void client_destroy(struct client *c) connection_release(c->connection); ZOOM_resultset_destroy(c->resultset); - c->resultset = 0; - c->next = client_freelist; - client_freelist = c; + xfree(c); } void client_set_connection(struct client *cl, struct connection *con) @@ -785,7 +776,7 @@ struct client *client_next_in_session(struct client *cl) } -int client_get_hits(struct client *cl) +Odr_int client_get_hits(struct client *cl) { return cl->hits; }