Jiří Popelka ed9c27
diff -up cups-1.4.3/scheduler/job.c.str3425p2 cups-1.4.3/scheduler/job.c
Jiří Popelka ed9c27
--- cups-1.4.3/scheduler/job.c.str3425p2	2010-06-01 17:16:46.000000000 +0200
Jiří Popelka ed9c27
+++ cups-1.4.3/scheduler/job.c	2010-06-01 17:19:10.000000000 +0200
Jiří Popelka ed9c27
@@ -2286,12 +2286,14 @@ cupsdSetJobState(
Jiří Popelka ed9c27
   if (!cupsdLoadJob(job))
Jiří Popelka ed9c27
     return;
Jiří Popelka ed9c27
 
Jiří Popelka ed9c27
- /*
Jiří Popelka ed9c27
-  * Don't do anything if the state is unchanged...
Jiří Popelka ed9c27
-  */
Jiří Popelka ed9c27
-
Jiří Popelka ed9c27
-  if (newstate == (oldstate = job->state_value))
Jiří Popelka ed9c27
-    return;
Jiří Popelka ed9c27
+  /*
Jiří Popelka ed9c27
+   * Don't do anything if the state is unchanged and we aren't purging the
Jiří Popelka ed9c27
+   * job...
Jiří Popelka ed9c27
+   */
Jiří Popelka ed9c27
+
Jiří Popelka ed9c27
+   oldstate = job->state_value;
Jiří Popelka ed9c27
+   if (newstate == oldstate && action != CUPSD_JOB_PURGE)
Jiří Popelka ed9c27
+     return;
Jiří Popelka ed9c27
 
Jiří Popelka ed9c27
  /*
Jiří Popelka ed9c27
   * Stop any processes that are working on the current job...
Jiří Popelka ed9c27
@@ -2498,6 +2500,15 @@ cupsdSetJobState(
Jiří Popelka ed9c27
 	  job->dirty = 1;
Jiří Popelka ed9c27
 	  cupsdMarkDirty(CUPSD_DIRTY_JOBS);
Jiří Popelka ed9c27
 	}
Jiří Popelka ed9c27
+	else if (!job->printer)
Jiří Popelka ed9c27
+	{
Jiří Popelka ed9c27
+	 /*
Jiří Popelka ed9c27
+	  * Delete the job immediately if not actively printing...
Jiří Popelka ed9c27
+	  */
Jiří Popelka ed9c27
+
Jiří Popelka ed9c27
+	  cupsdDeleteJob(job, CUPSD_JOB_PURGE);
Jiří Popelka ed9c27
+	  job = NULL;
Jiří Popelka ed9c27
+	}
Jiří Popelka ed9c27
 	break;
Jiří Popelka ed9c27
   }
Jiří Popelka ed9c27
 
Jiří Popelka ed9c27
@@ -2505,7 +2516,7 @@ cupsdSetJobState(
Jiří Popelka ed9c27
   * Finalize the job immediately if we forced things...
Jiří Popelka ed9c27
   */
Jiří Popelka ed9c27
 
Jiří Popelka ed9c27
-  if (action >= CUPSD_JOB_FORCE && job->printer)
Jiří Popelka ed9c27
+  if (action >= CUPSD_JOB_FORCE && job && job->printer)
Jiří Popelka ed9c27
     finalize_job(job, 0);
Jiří Popelka ed9c27
 
Jiří Popelka ed9c27
  /*