From 719ba316dfc7c32f12375917301718af51509e5f Mon Sep 17 00:00:00 2001 From: Joshua Oreman Date: Wed, 25 Nov 2009 17:27:50 -0800 Subject: [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 --- src/core/refcnt.c | 12 ++++++++++++ src/image/embedded.c | 12 +----------- src/include/ipxe/refcnt.h | 1 + 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 #include -/** - * 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 */ -- cgit v1.2.3-55-g7522