From 656485c1f1487775ccb0c223c4f5809f8daa7fcc Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 28 May 2007 17:35:15 +0000 Subject: Make URI structures reference-counted. --- src/include/gpxe/open.h | 3 --- src/include/gpxe/uri.h | 23 ++++++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) (limited to 'src/include/gpxe') diff --git a/src/include/gpxe/open.h b/src/include/gpxe/open.h index b16bbe88a..5e368486b 100644 --- a/src/include/gpxe/open.h +++ b/src/include/gpxe/open.h @@ -46,9 +46,6 @@ struct uri_opener { * @v xfer Data transfer interface * @v uri URI * @ret rc Return status code - * - * This method takes ownership of the URI structure, and is - * responsible for eventually calling free_uri(). */ int ( * open ) ( struct xfer_interface *xfer, struct uri *uri ); }; diff --git a/src/include/gpxe/uri.h b/src/include/gpxe/uri.h index b8c7e098a..6fddcc33b 100644 --- a/src/include/gpxe/uri.h +++ b/src/include/gpxe/uri.h @@ -8,6 +8,7 @@ */ #include +#include /** A Uniform Resource Identifier * @@ -37,6 +38,8 @@ * query = "what=is", fragment = "this" */ struct uri { + /** Reference count */ + struct refcnt refcnt; /** Scheme */ const char *scheme; /** Opaque part */ @@ -100,15 +103,25 @@ static inline int uri_has_relative_path ( struct uri *uri ) { } /** - * Free URI structure + * Increment URI reference count * * @v uri URI + * @ret uri URI + */ +static inline __attribute__ (( always_inline )) struct uri * +uri_get ( struct uri *uri ) { + ref_get ( &uri->refcnt ); + return uri; +} + +/** + * Decrement URI reference count * - * Frees all the dynamically-allocated storage used by the URI - * structure. + * @v uri URI */ -static inline void free_uri ( struct uri *uri ) { - free ( uri ); +static inline __attribute__ (( always_inline )) void +uri_put ( struct uri *uri ) { + ref_put ( &uri->refcnt ); } extern struct uri * parse_uri ( const char *uri_string ); -- cgit v1.2.3-55-g7522