diff options
author | Joshua Oreman | 2009-11-26 02:27:50 +0100 |
---|---|---|
committer | Michael Brown | 2010-06-23 01:34:48 +0200 |
commit | 719ba316dfc7c32f12375917301718af51509e5f (patch) | |
tree | f1d06dd58b69b9cbf1e6fc9d3e8243be84a199f6 | |
parent | [http] Pass through unknown interface method calls (diff) | |
download | ipxe-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.c | 12 | ||||
-rw-r--r-- | src/image/embedded.c | 12 | ||||
-rw-r--r-- | 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 <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 */ |