[PATCH 2/2] vfs_snapper: use a talloc hierarchy for arrays

David Disseldorp ddiss at samba.org
Mon Jun 30 06:40:14 MDT 2014


Currently the config and snapshot array entries are freed individually.
A talloc hierarchy can be used to avoid this behaviour.

Signed-off-by: David Disseldorp <ddiss at samba.org>
---
 source3/modules/vfs_snapper.c | 32 +++++---------------------------
 1 file changed, 5 insertions(+), 27 deletions(-)

diff --git a/source3/modules/vfs_snapper.c b/source3/modules/vfs_snapper.c
index 4ee77df..f0f0b5c 100644
--- a/source3/modules/vfs_snapper.c
+++ b/source3/modules/vfs_snapper.c
@@ -326,17 +326,6 @@ static NTSTATUS snapper_conf_unpack(TALLOC_CTX *mem_ctx,
 	return status;
 }
 
-static void snapper_conf_array_free(int32_t num_confs,
-				    struct snapper_conf *confs)
-{
-	int i;
-
-	for (i = 0; i < num_confs; i++) {
-		talloc_free(confs[i].attrs);
-	}
-	talloc_free(confs);
-}
-
 static struct snapper_conf *snapper_conf_array_base_find(int32_t num_confs,
 						struct snapper_conf *confs,
 							 const char *base)
@@ -393,7 +382,7 @@ static NTSTATUS snapper_conf_array_unpack(TALLOC_CTX *mem_ctx,
 		if (confs == NULL)
 			abort();
 
-		status = snapper_conf_unpack(mem_ctx, &array_iter,
+		status = snapper_conf_unpack(confs, &array_iter,
 					     &confs[num_confs - 1]);
 		if (!NT_STATUS_IS_OK(status)) {
 			talloc_free(confs);
@@ -558,17 +547,6 @@ static NTSTATUS snapper_snap_struct_unpack(TALLOC_CTX *mem_ctx,
 	return status;
 }
 
-static void snapper_snap_array_free(int32_t num_snaps,
-				    struct snapper_snap *snaps)
-{
-	int i;
-
-	for (i = 0; i < num_snaps; i++) {
-		talloc_free(snaps[i].user_data);
-	}
-	talloc_free(snaps);
-}
-
 static void snapper_snap_array_print(int32_t num_snaps,
 				     struct snapper_snap *snaps)
 {
@@ -620,7 +598,7 @@ static NTSTATUS snapper_snap_array_unpack(TALLOC_CTX *mem_ctx,
 		if (snaps == NULL)
 			abort();
 
-		status = snapper_snap_struct_unpack(mem_ctx, &array_iter,
+		status = snapper_snap_struct_unpack(snaps, &array_iter,
 						    &snaps[num_snaps - 1]);
 		if (!NT_STATUS_IS_OK(status)) {
 			talloc_free(snaps);
@@ -803,7 +781,7 @@ static NTSTATUS snapper_get_conf_call(TALLOC_CTX *mem_ctx,
 		goto err_conf_name_free;
 	}
 
-	snapper_conf_array_free(num_confs, confs);
+	talloc_free(confs);
 	dbus_message_unref(rsp_msg);
 	dbus_message_unref(req_msg);
 
@@ -815,7 +793,7 @@ static NTSTATUS snapper_get_conf_call(TALLOC_CTX *mem_ctx,
 err_conf_name_free:
 	talloc_free(conf_name);
 err_array_free:
-	snapper_conf_array_free(num_confs, confs);
+	talloc_free(confs);
 err_rsp_free:
 	dbus_message_unref(rsp_msg);
 err_req_free:
@@ -1069,7 +1047,7 @@ static NTSTATUS snapper_get_snap_at_time_call(TALLOC_CTX *mem_ctx,
 
 	*snap_path_out = snap_path;
 err_snap_array_free:
-	snapper_snap_array_free(num_snaps, snaps);
+	talloc_free(snaps);
 err_rsp_free:
 	dbus_message_unref(rsp_msg);
 err_req_free:
-- 
1.8.4.5



More information about the samba-technical mailing list