summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/resource.c15
-rw-r--r--lib/resource.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/resource.c b/lib/resource.c
index 5589373e..4c4b92ec 100644
--- a/lib/resource.c
+++ b/lib/resource.c
@@ -393,6 +393,21 @@ mb_realloc(void *m, unsigned size)
return b->data;
}
+/**
+ * mb_move - move a memory block
+ * @m: memory block
+ * @p: target pool
+ *
+ * mb_move() moves the given memory block to another pool in the same way
+ * as rmove() moves a plain resource.
+ */
+void
+mb_move(void *m, pool *p)
+{
+ struct mblock *b = SKIP_BACK(struct mblock, data, m);
+ rmove(b, p);
+}
+
/**
* mb_free - free a memory block
diff --git a/lib/resource.h b/lib/resource.h
index 48e62985..e65455c8 100644
--- a/lib/resource.h
+++ b/lib/resource.h
@@ -53,6 +53,7 @@ extern pool root_pool;
void *mb_alloc(pool *, unsigned size);
void *mb_allocz(pool *, unsigned size);
void *mb_realloc(void *m, unsigned size);
+void mb_move(void *, pool *);
void mb_free(void *);
/* Memory pools with linear allocation */