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.
This commit is contained in:
David Bremner 2012-12-16 15:58:15 -04:00
parent 77b4ec70ec
commit ba4e856529
3 changed files with 6 additions and 8 deletions

View file

@ -105,7 +105,7 @@ parse_sup_line (void *ctx, char *line,
tok_len++; tok_len++;
} }
if (tag_op_list_append (ctx, tag_ops, tok, FALSE)) if (tag_op_list_append (tag_ops, tok, FALSE))
return -1; return -1;
} }

View file

@ -109,7 +109,7 @@ parse_tag_line (void *ctx, char *line,
goto DONE; 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, ret = line_error (TAG_PARSE_OUT_OF_MEMORY, line_for_error,
"aborting"); "aborting");
goto DONE; goto DONE;
@ -294,7 +294,7 @@ tag_op_list_create (void *ctx)
list->size = TAG_OP_LIST_INITIAL_SIZE; list->size = TAG_OP_LIST_INITIAL_SIZE;
list->count = 0; 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) if (list->ops == NULL)
return NULL; return NULL;
@ -303,8 +303,7 @@ tag_op_list_create (void *ctx)
int int
tag_op_list_append (void *ctx, tag_op_list_append (tag_op_list_t *list,
tag_op_list_t *list,
const char *tag, const char *tag,
notmuch_bool_t remove) notmuch_bool_t remove)
{ {
@ -314,7 +313,7 @@ tag_op_list_append (void *ctx,
if (list->count == list->size) { if (list->count == list->size) {
list->size *= 2; 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); list->size);
if (list->ops == NULL) { if (list->ops == NULL) {
fprintf (stderr, "Out of memory.\n"); fprintf (stderr, "Out of memory.\n");

View file

@ -87,8 +87,7 @@ tag_op_list_create (void *ctx);
*/ */
int int
tag_op_list_append (void *ctx, tag_op_list_append (tag_op_list_t *list,
tag_op_list_t *list,
const char *tag, const char *tag,
notmuch_bool_t remove); notmuch_bool_t remove);