- rfd = (struct rset_prox_rfd *) xmalloc (sizeof(*rfd));
- logf(LOG_DEBUG,"rsprox (%s) open [%p]", ct->control->desc, rfd);
- rfd->next = info->rfd_list;
- info->rfd_list = rfd;
- rfd->info = info;
-
- rfd->more = xmalloc (sizeof(*rfd->more) * info->p.rset_no);
-
- rfd->buf = xmalloc(sizeof(*rfd->buf) * info->p.rset_no);
- for (i = 0; i < info->p.rset_no; i++)
- rfd->buf[i] = xmalloc (info->p.key_size);
-
- rfd->rfd = xmalloc(sizeof(*rfd->rfd) * info->p.rset_no);
- for (i = 0; i < info->p.rset_no; i++)
- rfd->rfd[i] = rset_open (info->p.rset[i], RSETF_READ);
-
- for (i = 0; i < info->p.rset_no; i++)
- rfd->more[i] = rset_read (info->p.rset[i], rfd->rfd[i],
- rfd->buf[i]);
- rfd->hits=0;
- return rfd;
-}
-
-static void r_close (RSFD rfd)
-{
- struct rset_prox_info *info = ((struct rset_prox_rfd*)rfd)->info;
- struct rset_prox_rfd **rfdp;
-
- for (rfdp = &info->rfd_list; *rfdp; rfdp = &(*rfdp)->next)
- if (*rfdp == rfd)
+ rfd = rfd_create_base(ct);
+ if (rfd->priv)
+ p=(struct rset_prox_rfd *)(rfd->priv);
+ else {
+ p = (struct rset_prox_rfd *) nmem_malloc(ct->nmem,sizeof(*p));
+ rfd->priv = p;
+ p->more = nmem_malloc (ct->nmem,sizeof(*p->more) * info->rset_no);
+ p->buf = nmem_malloc(ct->nmem,sizeof(*p->buf) * info->rset_no);
+ p->terms = nmem_malloc(ct->nmem,sizeof(*p->terms) * info->rset_no);
+ for (i = 0; i < info->rset_no; i++)