X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Freclists.c;h=0a9bd8c2261d1ed22419a4321f9f3043640cea50;hb=8cb5fdac44498271111dce8145623bded04cc27f;hp=99c033e02a5ca86eb08142590542282bddf3ba27;hpb=16c571a7e5b4e9b96a729a5b4aee373f7347375c;p=pazpar2-moved-to-github.git diff --git a/src/reclists.c b/src/reclists.c index 99c033e..0a9bd8c 100644 --- a/src/reclists.c +++ b/src/reclists.c @@ -209,27 +209,31 @@ static int reclist_cmp(const void *p1, const void *p2) return res; } -void reclist_limit(struct reclist *l, struct session *se) +void reclist_limit(struct reclist *l, struct session *se, int lazy) { unsigned i; int num = 0; struct reclist_bucket **pp = &l->sorted_list; reclist_enter(l); - for (i = 0; i < l->hash_size; i++) + + if (!lazy || !*pp) { - struct reclist_bucket *p; - for (p = l->hashtable[i]; p; p = p->hash_next) + for (i = 0; i < l->hash_size; i++) { - if (session_check_cluster_limit(se, p->record)) + struct reclist_bucket *p; + for (p = l->hashtable[i]; p; p = p->hash_next) { - *pp = p; - pp = &p->sorted_next; - num++; + if (session_check_cluster_limit(se, p->record)) + { + *pp = p; + pp = &p->sorted_next; + num++; + } } } + *pp = 0; } - *pp = 0; l->num_records = num; reclist_leave(l); }