From: Willy Tarreau Date: Sun, 7 Dec 2008 19:00:15 +0000 (+0100) Subject: [MINOR] add a new back-reference type : struct bref X-Git-Tag: v1.3.16-rc1~112 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bc04ce7cd97410e13de63051190e425c7ee2cab6;p=thirdparty%2Fhaproxy.git [MINOR] add a new back-reference type : struct bref This type will be used to maintain back-references to items which are subject to move between accesses. Typical usage includes session removal during a listing. --- diff --git a/include/common/mini-clist.h b/include/common/mini-clist.h index fca2d76270..7d16b5e46b 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 */