X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Frespool.h;h=56955707a2f9fb07d3180a4d0f3f3a5a7818fc0a;hb=0f88062c8973258611a8cba9a0e9668d1c688030;hp=2c312cffd9e2912f0bff702b7403c7895ccfe1f1;hpb=623185a65b8870abb82cd0dd8547a1aa4fc1f535;p=libucw.git diff --git a/ucw/respool.h b/ucw/respool.h index 2c312cff..56955707 100644 --- a/ucw/respool.h +++ b/ucw/respool.h @@ -77,7 +77,18 @@ static inline struct respool *rp_switch(struct respool *rp) struct resource *res_alloc(const struct res_class *rc) LIKE_MALLOC; // Returns NULL if there is no pool active void res_dump(struct resource *r, uns indent); /** Prints out a debugging dump of the resource to stdout. **/ -void res_free(struct resource *r); /** Frees a resource, unlinking it from its pool. **/ + +/** + * Frees a resource, unlinking it from its pool. + * When called with a NULL pointer, it does nothing, but safely. + **/ +void res_free(struct resource *r); + +/** + * Unlinks a resource from a pool and releases its meta-data. However, the resource itself is kept. + * When called with a NULL pointer, it does nothing, but safely. + **/ +void res_detach(struct resource *r); /** Marks a resource as temporary (sets @RES_FLAG_TEMP). **/ static inline void res_temporary(struct resource *r) @@ -95,7 +106,7 @@ static inline void res_permanent(struct resource *r) * === Resource classes * * A resource class describes how to handle a particular type of resources. - * Most importantly, it defines a set of callbacks for performing operations + * Most importantly, it defines a set of (optional) callbacks for performing operations * on the resources: * * * dump() should print a description of the resource used for debugging @@ -119,12 +130,10 @@ struct res_class { uns res_size; // Size of the resource structure (0=default) }; -/** Unlinks a resource from a pool and releases its meta-data. However, the resource itself is kept. **/ -void res_detach(struct resource *r); - /** * Unlinks a resource from a pool and releases its meta-data. Unlike @res_detach(), - * it does not invoke any callbacks. + * it does not invoke any callbacks. The caller must make sure that no references to + * the meta-data remain, so this is generally safe only inside resource class code. **/ void res_drop(struct resource *r);