X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fpazpar2.c;h=049fa85392526f6c19eaf88ba82a689f1ca900de;hb=e87d57823550dad9a66ac3569a277835ce3bc3d3;hp=1f91e6a503dc14cff5e44a364ed9b5e5c6ec4308;hpb=b4878c1c20eea3e38145138e1c145f3bffe50ee8;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2.c b/src/pazpar2.c index 1f91e6a..049fa85 100644 --- a/src/pazpar2.c +++ b/src/pazpar2.c @@ -1,4 +1,4 @@ -/* $Id: pazpar2.c,v 1.8 2007-01-03 16:59:32 quinn Exp $ */; +/* $Id: pazpar2.c,v 1.14 2007-01-04 22:04:25 quinn Exp $ */; #include #include @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -19,6 +20,11 @@ #include #include +#define USE_TIMING 0 +#if USE_TIMING +#include +#endif + #include "pazpar2.h" #include "eventl.h" #include "command.h" @@ -76,7 +82,6 @@ struct parameters global_parameters = 0 }; - static int send_apdu(struct client *c, Z_APDU *a) { struct connection *co = c->connection; @@ -451,26 +456,35 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) { xmlChar *type = xmlGetProp(n, "type"); xmlChar *value = xmlNodeListGetString(xdoc, n->children, 0); - add_facet(se, type, value); - relevance_countwords(se->relevance, head, value, 1); + if (type && value) + { + add_facet(se, type, value); + relevance_countwords(se->relevance, head, value, 1); + } xmlFree(type); xmlFree(value); } else if (!strcmp(n->name, "metadata")) { - xmlChar *type = xmlGetProp(n, "type"), *value; - if (!strcmp(type, "title")) - res->title = nmem_strdup(se->nmem, - value = xmlNodeListGetString(xdoc, n->children, 0)); - - relevance_countwords(se->relevance, head, value, 4); + xmlChar *type = xmlGetProp(n, "type"); + if (type && !strcmp(type, "title")) + { + xmlChar *value = xmlNodeListGetString(xdoc, n->children, 0); + if (value) + { + res->title = nmem_strdup(se->nmem, value); + relevance_countwords(se->relevance, head, value, 4); + xmlFree(value); + } + } xmlFree(type); - xmlFree(value); } else yaz_log(YLOG_WARN, "Unexpected element %s in internal record", n->name); } + xmlFreeDoc(xdoc); + relevance_donerecord(se->relevance, head); se->total_records++; @@ -479,6 +493,9 @@ static struct record *ingest_record(struct client *cl, Z_External *rec) static void ingest_records(struct client *cl, Z_Records *r) { +#if USE_TIMING + yaz_timing_t t = yaz_timing_create(); +#endif struct record *rec; struct session *s = cl->session; Z_NamePlusRecordList *rlist; @@ -503,6 +520,14 @@ static void ingest_records(struct client *cl, Z_Records *r) } if (s->watchlist[SESSION_WATCH_RECORDS].fun && rlist->num_records) session_alert_watch(s, SESSION_WATCH_RECORDS); + +#if USE_TIMING + yaz_timing_stop(t); + yaz_log(YLOG_LOG, "ingest_records %6.5f %3.2f %3.2f", + yaz_timing_get_real(t), yaz_timing_get_user(t), + yaz_timing_get_sys(t)); + yaz_timing_destroy(&t); +#endif } static void do_presentResponse(IOCHAN i, Z_APDU *a) @@ -1017,6 +1042,21 @@ int select_targets(struct session *se) return c; } +int session_active_clients(struct session *s) +{ + struct client *c; + int res = 0; + + for (c = s->clients; c; c = c->next) + if (c->connection && (c->state == Client_Connecting || + c->state == Client_Initializing || + c->state == Client_Searching || + c->state == Client_Presenting)) + res++; + + return res; +} + char *search(struct session *se, char *query) { int live_channels = 0; @@ -1120,9 +1160,7 @@ struct termlist_score **termlist(struct session *s, const char *name, int *num) return 0; } -#ifdef REPORT_NMEM -// conditional compilation by SH: This lead to a warning with currently installed -// YAZ header files on us1 +#ifdef MISSING_HEADERS void report_nmem_stats(void) { size_t in_use, is_free; @@ -1141,7 +1179,9 @@ struct record **show(struct session *s, int start, int *num, int *total, struct record **recs = nmem_malloc(nmem_show, *num * sizeof(struct record *)); int i; - +#if USE_TIMING + yaz_timing_t t = yaz_timing_create(); +#endif relevance_prepare_read(s->relevance, s->reclist); *total = s->reclist->num_records; @@ -1151,7 +1191,8 @@ struct record **show(struct session *s, int start, int *num, int *total, if (!reclist_read_record(s->reclist)) { *num = 0; - return 0; + recs = 0; + break; } for (i = 0; i < *num; i++) @@ -1164,6 +1205,13 @@ struct record **show(struct session *s, int start, int *num, int *total, } recs[i] = r; } +#if USE_TIMING + yaz_timing_stop(t); + yaz_log(YLOG_LOG, "show %6.5f %3.2f %3.2f", + yaz_timing_get_real(t), yaz_timing_get_user(t), + yaz_timing_get_sys(t)); + yaz_timing_destroy(&t); +#endif return recs; }