summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoss Lagerwall <rosslagerwall@gmail.com>2013-11-01 09:57:47 +0200
committerRoss Lagerwall <rosslagerwall@gmail.com>2013-11-14 10:32:15 +0200
commite355526f0c6c00bbb7593d02accd4075c4da800f (patch)
tree2b93898a7a7a019fd964aebfc061267a2134d047
parent2965194d8479e83dfa6e2ef0b0302aea2762dae3 (diff)
downloadgvfs-e355526f0c6c00bbb7593d02accd4075c4da800f.tar.gz
daemon: Make progress callbacks work with try methods
Before, for each job type that implements progress callbacks, the progress_proxy was being unref'd immediately after the backend's try or run method had run. This means that if the backend had an asynchronous callback which updated the progress, it wouldn't work because the progress_proxy had been removed. Fix this by unrefing the progress_proxy in the GVfsJobProgress class's finalize method. https://bugzilla.gnome.org/show_bug.cgi?id=711247
-rw-r--r--daemon/gvfsjobcopy.c6
-rw-r--r--daemon/gvfsjobmove.c6
-rw-r--r--daemon/gvfsjobprogress.c3
-rw-r--r--daemon/gvfsjobpull.c6
-rw-r--r--daemon/gvfsjobpush.c6
5 files changed, 2 insertions, 25 deletions
diff --git a/daemon/gvfsjobcopy.c b/daemon/gvfsjobcopy.c
index 78849f04..29132dde 100644
--- a/daemon/gvfsjobcopy.c
+++ b/daemon/gvfsjobcopy.c
@@ -131,9 +131,6 @@ run (GVfsJob *job)
op_job->flags,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
}
static gboolean
@@ -156,9 +153,6 @@ try (GVfsJob *job)
op_job->flags,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
return res;
}
diff --git a/daemon/gvfsjobmove.c b/daemon/gvfsjobmove.c
index 07480553..d9c39a9d 100644
--- a/daemon/gvfsjobmove.c
+++ b/daemon/gvfsjobmove.c
@@ -131,9 +131,6 @@ run (GVfsJob *job)
op_job->flags,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
}
static gboolean
@@ -156,9 +153,6 @@ try (GVfsJob *job)
op_job->flags,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
return res;
}
diff --git a/daemon/gvfsjobprogress.c b/daemon/gvfsjobprogress.c
index e1ccc773..d6395dfb 100644
--- a/daemon/gvfsjobprogress.c
+++ b/daemon/gvfsjobprogress.c
@@ -41,6 +41,7 @@ g_vfs_job_progress_finalize (GObject *object)
job = G_VFS_JOB_PROGRESS (object);
g_free (job->callback_obj_path);
+ g_clear_object (&job->progress_proxy);
if (G_OBJECT_CLASS (g_vfs_job_progress_parent_class)->finalize)
(*G_OBJECT_CLASS (g_vfs_job_progress_parent_class)->finalize) (object);
@@ -88,7 +89,7 @@ g_vfs_job_progress_construct_proxy (GVfsJob *job)
GVfsJobProgress *progress_job = G_VFS_JOB_PROGRESS (job);
GError *error = NULL;
- if (!progress_job->send_progress)
+ if (!progress_job->send_progress || progress_job->progress_proxy)
return;
progress_job->progress_proxy = gvfs_dbus_progress_proxy_new_sync (g_dbus_method_invocation_get_connection (dbus_job->invocation),
diff --git a/daemon/gvfsjobpull.c b/daemon/gvfsjobpull.c
index ffafedb6..18b40075 100644
--- a/daemon/gvfsjobpull.c
+++ b/daemon/gvfsjobpull.c
@@ -136,9 +136,6 @@ run (GVfsJob *job)
op_job->remove_source,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
}
static gboolean
@@ -162,9 +159,6 @@ try (GVfsJob *job)
op_job->remove_source,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
return res;
}
diff --git a/daemon/gvfsjobpush.c b/daemon/gvfsjobpush.c
index ddbec43b..f0748146 100644
--- a/daemon/gvfsjobpush.c
+++ b/daemon/gvfsjobpush.c
@@ -136,9 +136,6 @@ run (GVfsJob *job)
op_job->remove_source,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
}
static gboolean
@@ -162,9 +159,6 @@ try (GVfsJob *job)
op_job->remove_source,
progress_job->send_progress ? g_vfs_job_progress_callback : NULL,
progress_job->send_progress ? job : NULL);
-
- if (progress_job->progress_proxy)
- g_clear_object (&progress_job->progress_proxy);
return res;
}