Mercurial > nomad > experimental
changeset 275:ea552c27c7c1
objstore: turn object freeing op from a volume op to an object op
Trigger it when the last reference to an object is put.
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Mon, 25 Apr 2016 20:00:28 -0400 |
parents | 058ca7d4e96e |
children | 86f03d554cd3 |
files | src/objstore/include/nomad/objstore_backend.h src/objstore/mem/main.c src/objstore/mem/mem.h src/objstore/mem/obj.c src/objstore/obj.c |
diffstat | 5 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/objstore/include/nomad/objstore_backend.h Mon Apr 25 10:21:29 2016 -0400 +++ b/src/objstore/include/nomad/objstore_backend.h Mon Apr 25 20:00:28 2016 -0400 @@ -104,12 +104,16 @@ const char *name, uint16_t mode, struct noid *child); int (*unlink)(struct objstore_vol *vol, void *dircookie, const char *name); + + /* + * Called just before the generic object is freed. + */ + void (*free)(struct obj *obj); }; struct vol_ops { int (*getroot)(struct objstore_vol *store, struct noid *root); int (*allocobj)(struct obj *obj); - void (*freeobj)(struct obj *obj); }; struct objstore_vol_def {
--- a/src/objstore/mem/main.c Mon Apr 25 10:21:29 2016 -0400 +++ b/src/objstore/mem/main.c Mon Apr 25 20:00:28 2016 -0400 @@ -70,7 +70,11 @@ return 0; } -static void mem_freeobj(struct obj *obj) +/* + * We're keeping this here to keep it close to mem_allocobj(). As the name + * implies, this is an object op - not a volume op. + */ +void mem_obj_free(struct obj *obj) { struct memobj *mobj = obj->private; @@ -80,7 +84,6 @@ static const struct vol_ops vol_ops = { .getroot = mem_vol_getroot, .allocobj = mem_allocobj, - .freeobj = mem_freeobj, }; static int objcmp(const void *va, const void *vb)
--- a/src/objstore/mem/mem.h Mon Apr 25 10:21:29 2016 -0400 +++ b/src/objstore/mem/mem.h Mon Apr 25 20:00:28 2016 -0400 @@ -121,6 +121,8 @@ extern const struct obj_ops obj_ops; +extern void mem_obj_free(struct obj *obj); + extern struct memobj *newmemobj(struct memstore *ms, uint16_t mode); extern void freememobj(struct memobj *obj); extern struct memobj *findmemobj(struct memstore *store, const struct noid *oid);