diff -up cups-1.4rc1/scheduler/job.c.cancel-job cups-1.4rc1/scheduler/job.c --- cups-1.4rc1/scheduler/job.c.cancel-job 2009-08-19 14:48:55.733825903 +0100 +++ cups-1.4rc1/scheduler/job.c 2009-08-19 14:49:01.813826101 +0100 @@ -2359,19 +2359,21 @@ cupsdSetJobState( break; case IPP_JOB_ABORTED : - case IPP_JOB_CANCELED : case IPP_JOB_COMPLETED : /* - * Expire job subscriptions since the job is now "completed"... + * Remove the job from the active list... */ - cupsdExpireSubscriptions(NULL, job); + cupsArrayRemove(ActiveJobs, job); + + /* fall through... */ + case IPP_JOB_CANCELED : /* - * Remove the job from the active list... + * Expire job subscriptions since the job is now "completed"... */ - cupsArrayRemove(ActiveJobs, job); + cupsdExpireSubscriptions(NULL, job); #ifdef __APPLE__ /* diff -up cups-1.4rc1/scheduler/main.c.cancel-job cups-1.4rc1/scheduler/main.c --- cups-1.4rc1/scheduler/main.c.cancel-job 2009-08-19 14:48:55.451701014 +0100 +++ cups-1.4rc1/scheduler/main.c 2009-08-19 14:49:01.817825841 +0100 @@ -1803,6 +1803,13 @@ process_children(void) cupsdContinueJob(job); } } + else if (job->state_value == IPP_JOB_CANCELED) + { + for (i = 0; job->filters[i] < 0; i++); + + if (!job->filters[i] && job->backend < 0) + cupsArrayRemove(ActiveJobs, job); + } } }