Commit baf85418 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Don't needlessly return struct object

parent 35a9e755
...@@ -218,7 +218,7 @@ STV_MkObject(struct stevedore *stv, struct objcore *oc, void *ptr) ...@@ -218,7 +218,7 @@ STV_MkObject(struct stevedore *stv, struct objcore *oc, void *ptr)
* implement persistent storage can rely on. * implement persistent storage can rely on.
*/ */
struct object * int
stv_default_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot) stv_default_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot)
{ {
struct object *o; struct object *o;
...@@ -227,16 +227,16 @@ stv_default_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot) ...@@ -227,16 +227,16 @@ stv_default_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot)
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
st = stv->alloc(stv, ltot); st = stv->alloc(stv, ltot);
if (st == NULL) if (st == NULL)
return (NULL); return (0);
if (st->space < ltot) { if (st->space < ltot) {
stv->free(st); stv->free(st);
return (NULL); return (0);
} }
o = STV_MkObject(stv, oc, st->ptr); o = STV_MkObject(stv, oc, st->ptr);
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC); CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
st->len = sizeof(*o); st->len = sizeof(*o);
o->objstore = st; o->objstore = st;
return (o); return (1);
} }
/*------------------------------------------------------------------- /*-------------------------------------------------------------------
...@@ -248,11 +248,10 @@ stv_default_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot) ...@@ -248,11 +248,10 @@ stv_default_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot)
int int
STV_NewObject(struct busyobj *bo, const char *hint, unsigned wsl) STV_NewObject(struct busyobj *bo, const char *hint, unsigned wsl)
{ {
struct object *o;
struct objcore *oc; struct objcore *oc;
struct stevedore *stv, *stv0; struct stevedore *stv, *stv0;
unsigned ltot; unsigned ltot;
int i; int i, j;
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
oc = bo->fetch_objcore; oc = bo->fetch_objcore;
...@@ -260,36 +259,33 @@ STV_NewObject(struct busyobj *bo, const char *hint, unsigned wsl) ...@@ -260,36 +259,33 @@ STV_NewObject(struct busyobj *bo, const char *hint, unsigned wsl)
assert(wsl > 0); assert(wsl > 0);
wsl = PRNDUP(wsl); wsl = PRNDUP(wsl);
ltot = sizeof *o + wsl; ltot = sizeof(struct object) + wsl;
stv = stv0 = stv_pick_stevedore(bo->vsl, &hint); stv = stv0 = stv_pick_stevedore(bo->vsl, &hint);
AN(stv->allocobj); AN(stv->allocobj);
o = stv->allocobj(stv, oc, ltot); j = stv->allocobj(stv, oc, ltot);
if (o == NULL && hint == NULL) { if (j == 0 && hint == NULL) {
do { do {
stv = stv_pick_stevedore(bo->vsl, &hint); stv = stv_pick_stevedore(bo->vsl, &hint);
AN(stv->allocobj); AN(stv->allocobj);
o = stv->allocobj(stv, oc, ltot); j = stv->allocobj(stv, oc, ltot);
} while (o == NULL && stv != stv0); } while (j == 0 && stv != stv0);
} }
if (o == NULL) { if (j == 0) {
/* no luck; try to free some space and keep trying */ /* no luck; try to free some space and keep trying */
for (i = 0; o == NULL && i < cache_param->nuke_limit; i++) { for (i = 0; j == 0 && i < cache_param->nuke_limit; i++) {
if (EXP_NukeOne(bo->vsl, bo->stats, stv->lru) == -1) if (EXP_NukeOne(bo->vsl, bo->stats, stv->lru) == -1)
break; break;
o = stv->allocobj(stv, oc, ltot); j = stv->allocobj(stv, oc, ltot);
} }
} }
if (o == NULL) if (j == 0)
return (0); return (0);
bo->stats->n_object++; bo->stats->n_object++;
VSLb(bo->vsl, SLT_Storage, "%s %s", VSLb(bo->vsl, SLT_Storage, "%s %s",
oc->stobj->stevedore->name, oc->stobj->stevedore->ident); oc->stobj->stevedore->name, oc->stobj->stevedore->ident);
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
CHECK_OBJ_NOTNULL(o->objstore, STORAGE_MAGIC);
AN(stv->methods);
return (1); return (1);
} }
......
...@@ -61,7 +61,7 @@ typedef void storage_open_f(const struct stevedore *); ...@@ -61,7 +61,7 @@ typedef void storage_open_f(const struct stevedore *);
typedef struct storage *storage_alloc_f(struct stevedore *, size_t size); typedef struct storage *storage_alloc_f(struct stevedore *, size_t size);
typedef void storage_trim_f(struct storage *, size_t size, int move_ok); typedef void storage_trim_f(struct storage *, size_t size, int move_ok);
typedef void storage_free_f(struct storage *); typedef void storage_free_f(struct storage *);
typedef struct object *storage_allocobj_f(struct stevedore *, struct objcore *, typedef int storage_allocobj_f(struct stevedore *, struct objcore *,
unsigned ltot); unsigned ltot);
typedef void storage_close_f(const struct stevedore *); typedef void storage_close_f(const struct stevedore *);
typedef void storage_signal_close_f(const struct stevedore *); typedef void storage_signal_close_f(const struct stevedore *);
......
...@@ -504,7 +504,7 @@ smp_allocx(struct stevedore *st, size_t min_size, size_t max_size, ...@@ -504,7 +504,7 @@ smp_allocx(struct stevedore *st, size_t min_size, size_t max_size,
* Allocate an object * Allocate an object
*/ */
static struct object * static int
smp_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot) smp_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot)
{ {
struct object *o; struct object *o;
...@@ -519,13 +519,13 @@ smp_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot) ...@@ -519,13 +519,13 @@ smp_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot)
/* Don't entertain already dead objects */ /* Don't entertain already dead objects */
if ((oc->exp.ttl + oc->exp.grace + oc->exp.keep) <= 0.) if ((oc->exp.ttl + oc->exp.grace + oc->exp.keep) <= 0.)
return (NULL); return (0);
ltot = IRNUP(sc, ltot); ltot = IRNUP(sc, ltot);
st = smp_allocx(stv, ltot, ltot, &so, &objidx, &sg); st = smp_allocx(stv, ltot, ltot, &so, &objidx, &sg);
if (st == NULL) if (st == NULL)
return (NULL); return (0);
assert(st->space >= ltot); assert(st->space >= ltot);
...@@ -550,7 +550,7 @@ smp_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot) ...@@ -550,7 +550,7 @@ smp_allocobj(struct stevedore *stv, struct objcore *oc, unsigned ltot)
smp_init_oc(oc, sg, objidx); smp_init_oc(oc, sg, objidx);
Lck_Unlock(&sc->mtx); Lck_Unlock(&sc->mtx);
return (o); return (1);
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment