summaryrefslogtreecommitdiffstats
path: root/src/include/gpxe/refcnt.h
diff options
context:
space:
mode:
authorMichael Brown2007-04-30 01:53:39 +0200
committerMichael Brown2007-04-30 01:53:39 +0200
commitd40761d7258cd509d698c210fc6c478bd7788c6b (patch)
treec7f419e1e189936d706a53c26fc9f236e0118b6d /src/include/gpxe/refcnt.h
parentSkeleton job control interface (diff)
downloadipxe-d40761d7258cd509d698c210fc6c478bd7788c6b.tar.gz
ipxe-d40761d7258cd509d698c210fc6c478bd7788c6b.tar.xz
ipxe-d40761d7258cd509d698c210fc6c478bd7788c6b.zip
Add (and use) generic reference counter, to improve signal:noise ratio
in code defining reference-counted objects.
Diffstat (limited to 'src/include/gpxe/refcnt.h')
-rw-r--r--src/include/gpxe/refcnt.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/include/gpxe/refcnt.h b/src/include/gpxe/refcnt.h
new file mode 100644
index 000000000..ed147b9ac
--- /dev/null
+++ b/src/include/gpxe/refcnt.h
@@ -0,0 +1,39 @@
+#ifndef _GPXE_REFCNT_H
+#define _GPXE_REFCNT_H
+
+/** @file
+ *
+ * Reference counting
+ *
+ */
+
+/**
+ * A reference counter
+ *
+ * This data structure is designed to be embedded within a
+ * reference-counted object.
+ */
+struct refcnt {
+ /** Current reference count
+ *
+ * When this count is decremented below zero, the free()
+ * method will be called.
+ */
+ int refcnt;
+ /** Free containing object
+ *
+ * This method is called when the reference count is
+ * decremented below zero.
+ *
+ * If this method is left NULL, the standard library free()
+ * function will be called. The upshot of this is that you
+ * may omit the free() method if the @c refcnt object is the
+ * first element of your reference-counted struct.
+ */
+ void ( * free ) ( struct refcnt *refcnt );
+};
+
+extern void ref_get ( struct refcnt *refcnt );
+extern void ref_put ( struct refcnt *refcnt );
+
+#endif /* _GPXE_REFCNT_H */