diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-05-17 05:48:30 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:16:50 -0500 |
commit | 57bbd16b4172ce53cc631cb4d66918f9a9e8f6ba (patch) | |
tree | 1839743dec9aaad7c61ff6fe6bcc9a4fe612990d | |
parent | 1e76b85c23f78aa080274ff624b1cf6f7626e3cc (diff) | |
download | samba-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)
-rw-r--r-- | source4/lib/talloc/talloc.c | 19 |
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; } |