diff options
author | Ross Lagerwall <rosslagerwall@gmail.com> | 2013-11-01 09:57:47 +0200 |
---|---|---|
committer | Ross Lagerwall <rosslagerwall@gmail.com> | 2013-11-14 10:32:15 +0200 |
commit | e355526f0c6c00bbb7593d02accd4075c4da800f (patch) | |
tree | 2b93898a7a7a019fd964aebfc061267a2134d047 | |
parent | 2965194d8479e83dfa6e2ef0b0302aea2762dae3 (diff) | |
download | gvfs-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.c | 6 | ||||
-rw-r--r-- | daemon/gvfsjobmove.c | 6 | ||||
-rw-r--r-- | daemon/gvfsjobprogress.c | 3 | ||||
-rw-r--r-- | daemon/gvfsjobpull.c | 6 | ||||
-rw-r--r-- | daemon/gvfsjobpush.c | 6 |
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; } |