From ba4e8565294fc0a197b4c08082ad912c31888008 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sun, 16 Dec 2012 15:58:15 -0400 Subject: [PATCH 1/1] tag-utils: use the tag_opt_list_t as talloc context, if possible. The memory usage discipline of tag_op_list_t is never to free the internal array of tag operations before freeing the whole list, so it makes sense to take advantage of hierarchical de-allocation by talloc. By not relying on the context passed into tag_parse_line, we can allow tag_op_list_t structures to live longer than that context. --- notmuch-restore.c | 2 +- tag-util.c | 9 ++++----- tag-util.h | 3 +-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/notmuch-restore.c b/notmuch-restore.c index 28cbacf0..ac913754 100644 --- a/notmuch-restore.c +++ b/notmuch-restore.c @@ -105,7 +105,7 @@ parse_sup_line (void *ctx, char *line, tok_len++; } - if (tag_op_list_append (ctx, tag_ops, tok, FALSE)) + if (tag_op_list_append (tag_ops, tok, FALSE)) return -1; } diff --git a/tag-util.c b/tag-util.c index eab482f3..705b7baa 100644 --- a/tag-util.c +++ b/tag-util.c @@ -109,7 +109,7 @@ parse_tag_line (void *ctx, char *line, goto DONE; } - if (tag_op_list_append (ctx, tag_ops, tag, remove)) { + if (tag_op_list_append (tag_ops, tag, remove)) { ret = line_error (TAG_PARSE_OUT_OF_MEMORY, line_for_error, "aborting"); goto DONE; @@ -294,7 +294,7 @@ tag_op_list_create (void *ctx) list->size = TAG_OP_LIST_INITIAL_SIZE; list->count = 0; - list->ops = talloc_array (ctx, tag_operation_t, list->size); + list->ops = talloc_array (list, tag_operation_t, list->size); if (list->ops == NULL) return NULL; @@ -303,8 +303,7 @@ tag_op_list_create (void *ctx) int -tag_op_list_append (void *ctx, - tag_op_list_t *list, +tag_op_list_append (tag_op_list_t *list, const char *tag, notmuch_bool_t remove) { @@ -314,7 +313,7 @@ tag_op_list_append (void *ctx, if (list->count == list->size) { list->size *= 2; - list->ops = talloc_realloc (ctx, list->ops, tag_operation_t, + list->ops = talloc_realloc (list, list->ops, tag_operation_t, list->size); if (list->ops == NULL) { fprintf (stderr, "Out of memory.\n"); diff --git a/tag-util.h b/tag-util.h index 99b0fa0b..c07bfde5 100644 --- a/tag-util.h +++ b/tag-util.h @@ -87,8 +87,7 @@ tag_op_list_create (void *ctx); */ int -tag_op_list_append (void *ctx, - tag_op_list_t *list, +tag_op_list_append (tag_op_list_t *list, const char *tag, notmuch_bool_t remove); -- 2.43.0