[refcnt] Add ref_no_free handler
authorJoshua Oreman <oremanj@rwcr.net>
Thu, 26 Nov 2009 01:27:50 +0000 (17:27 -0800)
committerStefan Hajnoczi <stefanha@gmail.com>
Wed, 7 Jul 2010 19:22:19 +0000 (20:22 +0100)
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>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
src/core/refcnt.c
src/image/embedded.c
src/include/gpxe/refcnt.h

index f2286ca..1625832 100644 (file)
@@ -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 */
+}
index 3cb6368..0ae1ccd 100644 (file)
@@ -13,16 +13,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
 #include <gpxe/uaccess.h>
 #include <gpxe/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,            \
index bdbfe0f..9b81574 100644 (file)
@@ -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 /* _GPXE_REFCNT_H */