summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Oreman2009-11-26 02:27:50 +0100
committerMichael Brown2010-06-23 01:34:48 +0200
commit719ba316dfc7c32f12375917301718af51509e5f (patch)
treef1d06dd58b69b9cbf1e6fc9d3e8243be84a199f6
parent[http] Pass through unknown interface method calls (diff)
downloadipxe-719ba316dfc7c32f12375917301718af51509e5f.tar.gz
ipxe-719ba316dfc7c32f12375917301718af51509e5f.tar.xz
ipxe-719ba316dfc7c32f12375917301718af51509e5f.zip
[refcnt] Add ref_no_free handler
Since more reference-counted structures than embedded images might want to mark themselves unfreeable, expose a dummy ref_no_free(). Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/core/refcnt.c12
-rw-r--r--src/image/embedded.c12
-rw-r--r--src/include/ipxe/refcnt.h1
3 files changed, 14 insertions, 11 deletions
diff --git a/src/core/refcnt.c b/src/core/refcnt.c
index cd6ab964..e540240f 100644
--- a/src/core/refcnt.c
+++ b/src/core/refcnt.c
@@ -76,3 +76,15 @@ void ref_put ( struct refcnt *refcnt ) {
free ( refcnt );
}
}
+
+/**
+ * Do not free reference-counted object
+ *
+ * @v refcnt Reference counter
+ *
+ * This is meant for initializing a reference counter structure in a
+ * statically allocated object.
+ */
+void ref_no_free ( struct refcnt *refcnt __unused ) {
+ /* Do nothing */
+}
diff --git a/src/image/embedded.c b/src/image/embedded.c
index 89905d7f..53d601a6 100644
--- a/src/image/embedded.c
+++ b/src/image/embedded.c
@@ -13,16 +13,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <ipxe/uaccess.h>
#include <ipxe/init.h>
-/**
- * Free embedded image
- *
- * @v refcnt Reference counter
- */
-static void __attribute__ (( unused ))
-embedded_image_free ( struct refcnt *refcnt __unused ) {
- /* Do nothing */
-}
-
/* Raw image data for all embedded images */
#undef EMBED
#define EMBED( _index, _path, _name ) \
@@ -41,7 +31,7 @@ EMBED_ALL
/* Image structures for all embedded images */
#undef EMBED
#define EMBED( _index, _path, _name ) { \
- .refcnt = REF_INIT ( embedded_image_free ), \
+ .refcnt = REF_INIT ( ref_no_free ), \
.name = _name, \
.data = ( userptr_t ) ( embedded_image_ ## _index ## _data ), \
.len = ( size_t ) embedded_image_ ## _index ## _len, \
diff --git a/src/include/ipxe/refcnt.h b/src/include/ipxe/refcnt.h
index f359ac9c..37f574dc 100644
--- a/src/include/ipxe/refcnt.h
+++ b/src/include/ipxe/refcnt.h
@@ -77,5 +77,6 @@ ref_init ( struct refcnt *refcnt,
extern struct refcnt * ref_get ( struct refcnt *refcnt );
extern void ref_put ( struct refcnt *refcnt );
+extern void ref_no_free ( struct refcnt *refcnt );
#endif /* _IPXE_REFCNT_H */