tag-utils: use the tag_opt_list_t as talloc context, if possible.
authorDavid Bremner <bremner@debian.org>
Sun, 16 Dec 2012 19:58:15 +0000 (15:58 -0400)
committerDavid Bremner <bremner@debian.org>
Sun, 23 Dec 2012 03:13:15 +0000 (23:13 -0400)
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
tag-util.c
tag-util.h

index 28cbacf0cad7bf9c3bb9bf5c3067e3a1d2a2f715..ac913754d26b4e3130fe4ba2362fcd9dd4e9d30d 100644 (file)
@@ -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;
     }
 
index eab482f3012888b6c401b85b3775b01c274d7d5f..705b7baa383589468aa816b6a5811fe0725671a5 100644 (file)
@@ -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");
index 99b0fa0b41636dc162214f16aa9b0a0888bfa0c4..c07bfde5013fb720c93d15fa7653df185ce1276d 100644 (file)
@@ -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);