X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Fresource.h;h=33ea34790213199abad308d76187a7ab32702bf4;hb=1418d52e7f200f8e63c701dbcae3ddd811705676;hp=d2a415c3fca9de02e181057388f2db60abce5dd1;hpb=ba1c173f544383aa6553a75dee6e6858d8f243a4;p=libucw.git diff --git a/ucw/resource.h b/ucw/resource.h index d2a415c3..33ea3479 100644 --- a/ucw/resource.h +++ b/ucw/resource.h @@ -10,8 +10,29 @@ #ifndef _UCW_RESPOOL_H #define _UCW_RESPOOL_H -#include "ucw/clists.h" -#include "ucw/threads.h" +#include +#include + +#ifdef CONFIG_UCW_CLEAN_ABI +#define res_add ucw_res_add +#define res_alloc ucw_res_alloc +#define res_detach ucw_res_detach +#define res_drop ucw_res_drop +#define res_dump ucw_res_dump +#define res_eltpool ucw_res_eltpool +#define res_for_fd ucw_res_for_fd +#define res_free ucw_res_free +#define res_malloc ucw_res_malloc +#define res_malloc_zero ucw_res_malloc_zero +#define res_mempool ucw_res_mempool +#define res_realloc ucw_res_realloc +#define res_subpool ucw_res_subpool +#define rp_commit ucw_rp_commit +#define rp_delete ucw_rp_delete +#define rp_detach ucw_rp_detach +#define rp_dump ucw_rp_dump +#define rp_new ucw_rp_new +#endif /** * A resource pool. It contains a name of the pool (which is printed @@ -43,6 +64,7 @@ struct resource { /** Resource flags **/ enum resource_flags { RES_FLAG_TEMP = 1, // Resource is temporary + RES_FLAG_XFREE = 2, // Resource structure needs to be deallocated by xfree() }; /** @@ -74,7 +96,7 @@ static inline struct respool *rp_switch(struct respool *rp) return orp; } -struct resource *res_alloc(const struct res_class *rc) LIKE_MALLOC; // Returns NULL if there is no pool active +struct resource *res_alloc(const struct res_class *rc) LIKE_MALLOC; // Dies if there is no pool active void res_dump(struct resource *r, uns indent); /** Prints out a debugging dump of the resource to stdout. **/ @@ -130,6 +152,23 @@ struct res_class { uns res_size; // Size of the resource structure (0=default) }; +/** + * Initialize a pre-allocated buffer to the specific class of resource, setting its private data to @priv. + * This resource can be added to the current pool by @res_add(). + **/ +static inline struct resource *res_init(struct resource *r, const struct res_class *rc, void *priv) +{ + r->flags = 0; + r->rclass = rc; + r->priv = priv; + return r; +} + +/** + * Links a pre-initialized resource to the active pool. + **/ +void res_add(struct resource *r); + /** * Unlinks a resource from a pool and releases its meta-data. Unlike @res_detach(), * it does not invoke any callbacks. The caller must make sure that no references to