[gvfs/mtp-backend: 29/64] MTP: Don't leak LIBMTP_file_t objects everywhere.
- From: Philip Langdale <philipl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs/mtp-backend: 29/64] MTP: Don't leak LIBMTP_file_t objects everywhere.
- Date: Sat, 12 Jan 2013 04:36:34 +0000 (UTC)
commit 7c9e64ac4874fa291be53a3d3d93aa3e476c5e5b
Author: Philip Langdale <philipl overt org>
Date: Mon Aug 27 08:18:58 2012 -0700
MTP: Don't leak LIBMTP_file_t objects everywhere.
The documentation isn't clear that you have to clean these up, but
it's pretty obvious that you do.
daemon/gvfsbackendmtp.c | 38 ++++++++++++++++++++++++++++----------
1 files changed, 28 insertions(+), 10 deletions(-)
---
diff --git a/daemon/gvfsbackendmtp.c b/daemon/gvfsbackendmtp.c
index 66e6551..a593199 100644
--- a/daemon/gvfsbackendmtp.c
+++ b/daemon/gvfsbackendmtp.c
@@ -628,7 +628,6 @@ do_enumerate (GVfsBackend *backend,
}
} else {
LIBMTP_file_t *files;
- LIBMTP_file_t *file;
int pid = (ne == 2 ? -1 : strtol(elements[ne-1], NULL, 10));
@@ -642,11 +641,16 @@ do_enumerate (GVfsBackend *backend,
LIBMTP_Clear_Errorstack(device);
goto exit;
}
- for (file = files; file != NULL; file = file->next) {
- info = g_file_info_new();
- get_file_info(backend, device, info, file);
- g_vfs_job_enumerate_add_info (job, info);
- g_object_unref(info);
+ while (files != NULL) {
+ LIBMTP_file_t *file = files;
+ files = files->next;
+
+ info = g_file_info_new();
+ get_file_info(backend, device, info, file);
+ g_vfs_job_enumerate_add_info (job, info);
+ g_object_unref(info);
+
+ LIBMTP_destroy_file_t(file);
}
}
@@ -705,22 +709,32 @@ do_query_info (GVfsBackend *backend,
if (ne > 3) {
parent_id = strtol(elements[ne-2], NULL, 10);
}
- LIBMTP_file_t *files = LIBMTP_Get_Files_And_Folders(device, strtol(elements[1], NULL, 10),
- parent_id);
- LIBMTP_file_t *i;
- for (i = files; i != NULL; i = i->next) {
+ LIBMTP_file_t *i = LIBMTP_Get_Files_And_Folders(device, strtol(elements[1], NULL, 10),
+ parent_id);
+ while (i != NULL) {
g_print ("(II) backup query (entity = %s, name = %s) \n", i->filename, elements[ne-1]);
if (strcmp(i->filename, elements[ne-1]) == 0) {
file = i;
+ i = i->next;
break;
+ } else {
+ LIBMTP_file_t *tmp = i;
+ i = i->next;
+ LIBMTP_destroy_file_t(tmp);
}
}
+ while (i != NULL) {
+ LIBMTP_file_t *tmp = i;
+ i = i->next;
+ LIBMTP_destroy_file_t(tmp);
+ }
} else {
file = LIBMTP_Get_Filemetadata(device, strtol(elements[ne-1], NULL, 10));
}
if (file != NULL) {
get_file_info(backend, device, info, file);
+ LIBMTP_destroy_file_t(file);
} else {
g_vfs_job_failed (G_VFS_JOB (job),
G_IO_ERROR, G_IO_ERROR_FAILED,
@@ -841,6 +855,8 @@ do_pull(GVfsBackend *backend,
info = g_file_info_new();
get_file_info(backend, device, info, file);
+ LIBMTP_destroy_file_t(file);
+ file = NULL;
if (g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY) {
GError *error;
GFile *file = g_file_new_for_path (local_path);
@@ -1104,6 +1120,8 @@ do_set_display_name (GVfsBackend *backend,
"Error while renaming entity.");
goto exit;
}
+ LIBMTP_destroy_file_t(file);
+ file = NULL;
g_vfs_job_set_display_name_set_new_path(job, filename);
g_vfs_job_succeeded (G_VFS_JOB (job));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]