]> www.fi.muni.cz Git - evince.git/commitdiff
libview: make sure cancellable object is always cancelled in ev_job_cancel()
authorCarlos Garcia Campos <carlosgc@gnome.org>
Sat, 4 Dec 2010 14:46:52 +0000 (15:46 +0100)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Sat, 4 Dec 2010 14:56:50 +0000 (15:56 +0100)
It's safe to call it multiple times, and we still don't emit our
cancelled signal for finished jobs.

libview/ev-jobs.c

index ee58943e1bc2c637c4d0d3320dec2bb974d0b4ba..3a74876c694e3c5c28d31ecb55d84152d938e64d 100644 (file)
@@ -216,7 +216,7 @@ ev_job_run (EvJob *job)
 void
 ev_job_cancel (EvJob *job)
 {
-       if (job->cancelled || (job->finished && job->idle_finished_id == 0))
+       if (job->cancelled)
                return;
 
        ev_debug_message (DEBUG_JOBS, "job %s (%p) cancelled", EV_GET_TYPE_NAME (job), job);
@@ -225,6 +225,10 @@ ev_job_cancel (EvJob *job)
        /* This should never be called from a thread */
        job->cancelled = TRUE;
        g_cancellable_cancel (job->cancellable);
+
+        if (job->finished && job->idle_finished_id == 0)
+                return;
+
        g_signal_emit (job, job_signals[CANCELLED], 0);
 }