Blame SOURCES/0001-Fix-stuck-multi-file-jobs-Issue-5359-Issue-5413.patch

87cf9a
diff -up cups-1.6.3/backend/socket.c.multifile-stuck cups-1.6.3/backend/socket.c
87cf9a
--- cups-1.6.3/backend/socket.c.multifile-stuck	2018-12-14 13:18:17.714146640 +0100
87cf9a
+++ cups-1.6.3/backend/socket.c	2018-12-14 13:20:15.781155072 +0100
87cf9a
@@ -430,8 +430,10 @@ main(int  argc,				/* I - Number of comm
87cf9a
       lseek(print_fd, 0, SEEK_SET);
87cf9a
     }
87cf9a
 
87cf9a
-    tbytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addrlist->addr), 1,
87cf9a
-                            0, backendNetworkSideCB);
87cf9a
+    if ((bytes = backendRunLoop(print_fd, device_fd, snmp_fd, &(addrlist->addr), 1, 0, backendNetworkSideCB)) < 0)
87cf9a
+      tbytes = -1;
87cf9a
+    else
87cf9a
+      tbytes = bytes;
87cf9a
 
87cf9a
     if (print_fd != 0 && tbytes >= 0)
87cf9a
       _cupsLangPrintFilter(stderr, "INFO", _("Print file sent."));
87cf9a
@@ -448,7 +450,7 @@ main(int  argc,				/* I - Number of comm
87cf9a
       break;
87cf9a
 #endif /* __APPLE__ */
87cf9a
 
87cf9a
-  if (waiteof)
87cf9a
+  if (waiteof && tbytes >= 0)
87cf9a
   {
87cf9a
    /*
87cf9a
     * Shutdown the socket and wait for the other end to finish...
87cf9a
@@ -485,7 +487,7 @@ main(int  argc,				/* I - Number of comm
87cf9a
   if (print_fd != 0)
87cf9a
     close(print_fd);
87cf9a
 
87cf9a
-  return (CUPS_BACKEND_OK);
87cf9a
+  return (tbytes >= 0 ? CUPS_BACKEND_OK : CUPS_BACKEND_FAILED);
87cf9a
 }
87cf9a
 
87cf9a
 
87cf9a
diff -up cups-1.6.3/scheduler/main.c.multifile-stuck cups-1.6.3/scheduler/main.c
87cf9a
--- cups-1.6.3/scheduler/main.c.multifile-stuck	2018-12-14 13:18:17.707146699 +0100
87cf9a
+++ cups-1.6.3/scheduler/main.c	2018-12-14 13:18:17.726146539 +0100
87cf9a
@@ -1855,9 +1855,16 @@ process_children(void)
87cf9a
               (!job->filters[i] && WIFEXITED(old_status)))
87cf9a
           {				/* Backend and filter didn't crash */
87cf9a
 	    if (job->filters[i])
87cf9a
+	    {
87cf9a
 	      job->status = status;	/* Filter failed */
87cf9a
+	    }
87cf9a
 	    else
87cf9a
+	    {
87cf9a
 	      job->status = -status;	/* Backend failed */
87cf9a
+
87cf9a
+	      if (job->current_file < job->num_files)
87cf9a
+	        cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_FORCE, "Canceling multi-file job due to backend failure.");
87cf9a
+	    }
87cf9a
           }
87cf9a
 
87cf9a
 	  if (job->state_value == IPP_JOB_PROCESSING &&