From 861376a037c835021eb52917de6d66072011072b Mon Sep 17 00:00:00 2001 From: Packit Service Date: Dec 09 2020 13:04:36 +0000 Subject: Apply patch 0001-Fix-stuck-multi-file-jobs-Issue-5359-Issue-5413.patch patch_name: 0001-Fix-stuck-multi-file-jobs-Issue-5359-Issue-5413.patch present_in_specfile: true --- diff --git a/backend/socket.c b/backend/socket.c index c16a1a0..19ba0cf 100644 --- a/backend/socket.c +++ b/backend/socket.c @@ -402,8 +402,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */ lseek(print_fd, 0, SEEK_SET); } - tbytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addrlist->addr), 1, - 0, backendNetworkSideCB); + if ((bytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addrlist->addr), 1, 0, backendNetworkSideCB)) < 0) + tbytes = -1; + else + tbytes = bytes; if (print_fd != 0 && tbytes >= 0) _cupsLangPrintFilter(stderr, "INFO", _("Print file sent.")); @@ -411,7 +413,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */ fputs("STATE: +cups-waiting-for-job-completed\n", stderr); - if (waiteof) + if (waiteof && tbytes >= 0) { /* * Shutdown the socket and wait for the other end to finish... @@ -448,7 +450,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */ if (print_fd != 0) close(print_fd); - return (CUPS_BACKEND_OK); + return (tbytes >= 0 ? CUPS_BACKEND_OK : CUPS_BACKEND_FAILED); } diff --git a/scheduler/main.c b/scheduler/main.c index 934beab..592531a 100644 --- a/scheduler/main.c +++ b/scheduler/main.c @@ -1539,9 +1539,16 @@ process_children(void) (!job->filters[i] && WIFEXITED(old_status))) { /* Backend and filter didn't crash */ if (job->filters[i]) + { job->status = status; /* Filter failed */ + } else + { job->status = -status; /* Backend failed */ + + if (job->current_file < job->num_files) + cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_FORCE, "Canceling multi-file job due to backend failure."); + } } if (job->state_value == IPP_JOB_PROCESSING &&