X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Fresource.c;h=86cc8ab385d3c810480e99b4a31c623ce9bd95a5;hb=12b2eb1c3f53b2b73b2c916dd907c04834f70fde;hp=3fd163ae5c5836b5fd1a0be669d23cc5a236d1f9;hpb=fa7aa6d9457616ce28f97c83eaa616d0ff276870;p=libucw.git diff --git a/ucw/resource.c b/ucw/resource.c index 3fd163ae..86cc8ab3 100644 --- a/ucw/resource.c +++ b/ucw/resource.c @@ -100,20 +100,38 @@ res_alloc(const struct res_class *rc) { struct respool *rp = rp_current(); ASSERT(rp); - uns size = (rc->res_size ? : sizeof(struct resource)); - struct resource *r = (rp->mpool ? mp_alloc_fast(rp->mpool, size) : xmalloc(size)); + struct resource *r; + if (rp->mpool) + { + r = mp_alloc_fast(rp->mpool, size); + r->flags = 0; + } + else + { + r = xmalloc(size); + r->flags = RES_FLAG_XFREE; + } + res_add(r); + return r; +} + +void +res_add(struct resource *r) +{ + struct respool *rp = rp_current(); + ASSERT(rp); r->rpool = rp; clist_add_tail(&rp->resources, &r->n); - r->flags = rp->default_res_flags; - return r; + r->flags &= ~RES_FLAG_TEMP; + r->flags |= rp->default_res_flags & RES_FLAG_TEMP; } void res_drop(struct resource *r) { clist_remove(&r->n); - if (!r->rpool->mpool) + if (r->flags & RES_FLAG_XFREE) xfree(r); }