[Devel] [PATCH 3/4] restart thread safety: remove malloc from genstack
Oren Laadan
orenl at cs.columbia.edu
Fri Jul 30 10:08:32 PDT 2010
We use clone and eclone directly and not through glibc, therefore
must explicitly care about thread-safety of malloc.
This patch eliminates the use of malloc() in genstack_alloc().
Use mmap() instead. While an overkill, I don't expect performance
issues of this.
Signed-off-by: Oren Laadan <orenl at cs.columbia.edu>
---
genstack.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/genstack.c b/genstack.c
index c552d04..c97e0c0 100644
--- a/genstack.c
+++ b/genstack.c
@@ -34,7 +34,11 @@ struct genstack *genstack_alloc(size_t sz)
if (sz == 0)
return NULL;
- stk = malloc(sizeof(*stk));
+ /*
+ * This is clearly an overkill; however, we must not use
+ * malloc because it may not be thread-safe!
+ */
+ stk = mmap(NULL, page_size(), mmap_prot, mmap_flags, -1, 0);
if (!stk)
return NULL;
@@ -61,7 +65,7 @@ struct genstack *genstack_alloc(size_t sz)
void genstack_release(struct genstack *stk)
{
munmap(stk->addr, stk->size);
- free(stk);
+ munmap(stk, page_size());
}
/* Return the size of the usable stack region. Suitable for providing
--
1.7.0.4
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list