+ RSFD rnew=rs->free_list;
+ if (rnew) {
+ rs->free_list=rnew->next;
+ assert(rnew->rset==rs);
+ /* logf(LOG_DEBUG,"rfd-create_base (fl): rfd=%p rs=%p fl=%p priv=%p",
+ rnew, rs, rs->free_list, rnew->priv); */
+ } else {
+ rnew=nmem_malloc(rs->nmem, sizeof(*rnew));
+ rnew->priv=NULL;
+ rnew->rset=rs;
+ /* logf(LOG_DEBUG,"rfd_create_base (new): rfd=%p rs=%p fl=%p priv=%p",
+ rnew, rs, rs->free_list, rnew->priv); */
+ }
+ rnew->next=NULL; /* not part of any (free?) list */
+ return rnew;
+}
+
+/* puts an rfd into the freelist of the rset. Only when the rset gets */
+/* deleted, will all the nmem disappear */
+void rfd_delete_base(RSFD rfd)
+{
+ RSET rs=rfd->rset;
+ /* logf(LOG_DEBUG,"rfd_delete_base: rfd=%p rs=%p priv=%p fl=%p",
+ rfd, rs, rfd->priv, rs->free_list); */
+ assert(NULL == rfd->next);
+ rfd->next=rs->free_list;
+ rs->free_list=rfd;
+}