]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
scheduler: Clean up failed IPP Everywhere permanent queues 1102/head
authorZdenek Dohnal <zdohnal@redhat.com>
Thu, 28 Nov 2024 14:37:18 +0000 (15:37 +0100)
committerZdenek Dohnal <zdohnal@redhat.com>
Thu, 28 Nov 2024 14:37:18 +0000 (15:37 +0100)
If creating of permanent queue with IPP Everywhere model fails in
separate thread, the print queue is created as raw.

It would be great if we remove such queue if creation fails, and marking
them as temporary would make them to be removed automatically.

scheduler/ipp.c

index 7946b9f3c2a9ba05288ca3fa8fb4984cdf0bf035..a22e612fe341df113de88b155294d48a7fcbc63f 100644 (file)
@@ -5226,6 +5226,7 @@ create_local_bg_thread(
       /* Force printer to timeout and be deleted */
       cupsRWLockWrite(&printer->lock);
       printer->state_time = 0;
+      printer->temporary = 1;
       cupsRWUnlock(&printer->lock);
 
       send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Couldn't resolve mDNS URI \"%s\"."), printer->device_uri);
@@ -5246,6 +5247,7 @@ create_local_bg_thread(
     /* Force printer to timeout and be deleted */
     cupsRWLockWrite(&printer->lock);
     printer->state_time = 0;
+    printer->temporary = 1;
     cupsRWUnlock(&printer->lock);
 
     send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to connect to %s:%d: %s"), host, port, cupsGetErrorString());
@@ -5330,6 +5332,7 @@ create_local_bg_thread(
     /* Force printer to timeout and be deleted */
     cupsRWLockWrite(&printer->lock);
     printer->state_time = 0;
+    printer->temporary = 1;
     cupsRWUnlock(&printer->lock);
 
     send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("The printer does not provide attributes required for IPP Everywhere."));
@@ -5339,6 +5342,12 @@ create_local_bg_thread(
   // Validate response from printer...
   if (!ippValidateAttributes(response))
   {
+    /* Force printer to timeout and be deleted */
+    cupsRWLockWrite(&printer->lock);
+    printer->state_time = 0;
+    printer->temporary = 1;
+    cupsRWUnlock(&printer->lock);
+
     send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Printer returned invalid data: %s"), cupsGetErrorString());
     goto finish_response;
   }
@@ -5387,6 +5396,7 @@ create_local_bg_thread(
       /* Force printer to timeout and be deleted */
       cupsRWLockWrite(&printer->lock);
       printer->state_time = 0;
+      printer->temporary = 1;
       cupsRWUnlock(&printer->lock);
 
       send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to create PPD for printer: %s"), strerror(errno));
@@ -5420,6 +5430,7 @@ create_local_bg_thread(
     /* Force printer to timeout and be deleted */
     cupsRWLockWrite(&printer->lock);
     printer->state_time = 0;
+    printer->temporary = 1;
     cupsRWUnlock(&printer->lock);
 
     send_ipp_status(con, IPP_STATUS_ERROR_DEVICE, _("Unable to create PPD: %s"), cupsGetErrorString());