mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-12 22:44:32 +00:00
39 lines
849 B
C
39 lines
849 B
C
|
#ifndef __XREF_H__
|
||
|
#define __XREF_H__
|
||
|
|
||
|
/* xref is used to create relation between two elements.
|
||
|
* Once an element is released, it breaks the relation. If the
|
||
|
* relation is already broken, it frees the xref struct.
|
||
|
* The pointer between two elements is sort of a refcount with
|
||
|
* max value 1. The relation is only between two elements.
|
||
|
* The pointer and the type of elements a and b are conventional.
|
||
|
*/
|
||
|
|
||
|
struct xref {
|
||
|
struct xref *peer;
|
||
|
};
|
||
|
|
||
|
static inline void xref_create(struct xref *xref_a, struct xref *xref_b)
|
||
|
{
|
||
|
xref_a->peer = xref_b;
|
||
|
xref_b->peer = xref_a;
|
||
|
}
|
||
|
|
||
|
static inline struct xref *xref_get_peer(struct xref *xref)
|
||
|
{
|
||
|
if (!xref->peer)
|
||
|
return NULL;
|
||
|
return xref->peer;
|
||
|
}
|
||
|
|
||
|
static inline void xref_disconnect(struct xref *xref)
|
||
|
{
|
||
|
if (!xref->peer)
|
||
|
return;
|
||
|
|
||
|
xref->peer->peer = NULL;
|
||
|
xref->peer = NULL;
|
||
|
}
|
||
|
|
||
|
#endif /* __XREF_H__ */
|