diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h index fca2d7627..7d16b5e46 100644 --- a/include/common/mini-clist.h +++ b/include/common/mini-clist.h @@ -19,6 +19,20 @@ struct list { struct list *p; /* prev */ }; +/* a back-ref is a pointer to a target list entry. It is used to detect when an + * element being deleted is currently being tracked by another user. The best + * example is a user dumping the session table. The table does not fit in the + * output buffer so we have to set a mark on a session and go on later. But if + * that marked session gets deleted, we don't want the user's pointer to go in + * the wild. So we can simply link this user's request to the list of this + * session's users, and put a pointer to the list element in ref, that will be + * used as the mark for next iteration. + */ +struct bref { + struct list users; + struct list *ref; /* pointer to the target's list entry */ +}; + /* First undefine some macros which happen to also be defined on OpenBSD, * in sys/queue.h, used by sys/event.h */