summaryrefslogtreecommitdiff
path: root/source4/lib/talloc
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-05-17 05:48:30 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:16:50 -0500
commit57bbd16b4172ce53cc631cb4d66918f9a9e8f6ba (patch)
tree1839743dec9aaad7c61ff6fe6bcc9a4fe612990d /source4/lib/talloc
parent1e76b85c23f78aa080274ff624b1cf6f7626e3cc (diff)
downloadsamba-57bbd16b4172ce53cc631cb4d66918f9a9e8f6ba.tar.gz
samba-57bbd16b4172ce53cc631cb4d66918f9a9e8f6ba.tar.bz2
samba-57bbd16b4172ce53cc631cb4d66918f9a9e8f6ba.zip
r6845: make the talloc header align to 40 bytes, which costs us an extra 4
bytes per allocation, but makes it much more portable (This used to be commit 257027a571da254c16b0b456cb1cbec284d7fda0)
Diffstat (limited to 'source4/lib/talloc')
-rw-r--r--source4/lib/talloc/talloc.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/source4/lib/talloc/talloc.c b/source4/lib/talloc/talloc.c
index e0f4cf9aff..6b6eb87f21 100644
--- a/source4/lib/talloc/talloc.c
+++ b/source4/lib/talloc/talloc.c
@@ -97,17 +97,20 @@ struct talloc_chunk {
struct talloc_chunk *parent, *child;
struct talloc_reference_handle *refs;
size_t size;
- unsigned magic;
talloc_destructor_t destructor;
const char *name;
+ union {
+ unsigned magic;
+ double align_dummy;
+ } u;
};
/* panic if we get a bad magic value */
static struct talloc_chunk *talloc_chunk_from_ptr(const void *ptr)
{
struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, ptr)-1;
- if (tc->magic != TALLOC_MAGIC) {
- if (tc->magic == TALLOC_MAGIC_FREE) {
+ if (tc->u.magic != TALLOC_MAGIC) {
+ if (tc->u.magic == TALLOC_MAGIC_FREE) {
TALLOC_ABORT("Bad talloc magic value - double free");
} else {
TALLOC_ABORT("Bad talloc magic value - unknown value");
@@ -180,7 +183,7 @@ void *_talloc(const void *context, size_t size)
if (tc == NULL) return NULL;
tc->size = size;
- tc->magic = TALLOC_MAGIC;
+ tc->u.magic = TALLOC_MAGIC;
tc->destructor = NULL;
tc->child = NULL;
tc->name = NULL;
@@ -559,7 +562,7 @@ int talloc_free(void *ptr)
if (tc->next) tc->next->prev = tc->prev;
}
- tc->magic = TALLOC_MAGIC_FREE;
+ tc->u.magic = TALLOC_MAGIC_FREE;
free(tc);
return 0;
@@ -599,7 +602,7 @@ void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *n
}
/* by resetting magic we catch users of the old memory */
- tc->magic = TALLOC_MAGIC_FREE;
+ tc->u.magic = TALLOC_MAGIC_FREE;
#if ALWAYS_REALLOC
new_ptr = malloc(size + sizeof(*tc));
@@ -611,12 +614,12 @@ void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *n
new_ptr = realloc(tc, size + sizeof(*tc));
#endif
if (!new_ptr) {
- tc->magic = TALLOC_MAGIC;
+ tc->u.magic = TALLOC_MAGIC;
return NULL;
}
tc = new_ptr;
- tc->magic = TALLOC_MAGIC;
+ tc->u.magic = TALLOC_MAGIC;
if (tc->parent) {
tc->parent->child = new_ptr;
}