MINOR: xref: Add a new xref system
xref is used to create a 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 a sort of refcount with
max value 1. The relation is only between two elements.
The pointer and the type of element a and b are conventional.
Note that xref is initialised from Lua files because Lua is
the only one user.
diff --git a/include/common/xref.h b/include/common/xref.h
new file mode 100644
index 0000000..b020280
--- /dev/null
+++ b/include/common/xref.h
@@ -0,0 +1,38 @@
+#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__ */