- rfd = (struct rset_multior_rfd *) xmalloc (sizeof(*rfd));
- rfd->flag = flag;
- rfd->next = info->rfd_list;
- rfd->info = info;
- info->rfd_list = rfd;
- rfd->h = heap_create( info->no_rsets, info->key_size, info->cmp);
- rfd->prevvalue=0;
- rfd->hits=0;
- rfd->items=(struct heap_item *) xmalloc(info->no_rsets*sizeof(*rfd->items));
+ rfd=rfd_create_base(ct);
+ if (rfd->priv) {
+ p=(struct rset_multior_rfd *)rfd->priv;
+ heap_clear(p->h);
+ assert(p->items);
+ /* all other pointers shouls already be allocated, in right sizes! */
+ }
+ else {
+ p = (struct rset_multior_rfd *) nmem_malloc (ct->nmem,sizeof(*p));
+ rfd->priv=p;
+ p->h = heap_create( ct->nmem, info->no_rsets, kctrl);
+ p->items=(struct heap_item *) nmem_malloc(ct->nmem,
+ info->no_rsets*sizeof(*p->items));
+ for (i=0; i<info->no_rsets; i++){
+ p->items[i].rset=info->rsets[i];
+ p->items[i].buf=nmem_malloc(ct->nmem,kctrl->key_size);
+ }
+ }
+ p->flag = flag;
+ p->hits=0;