You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.9 KiB
57 lines
1.9 KiB
2 years ago
|
diff --git a/backend/socket.c b/backend/socket.c
|
||
|
index 675061dd9..68379e95b 100644
|
||
|
--- a/backend/socket.c
|
||
|
+++ b/backend/socket.c
|
||
|
@@ -397,8 +397,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."));
|
||
|
@@ -406,7 +408,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...
|
||
|
@@ -443,7 +445,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 4b3914ade..472b9946d 100644
|
||
|
--- a/scheduler/main.c
|
||
|
+++ b/scheduler/main.c
|
||
|
@@ -1472,9 +1472,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 &&
|