7048cf4
diff -up cups-1.7.1/backend/dnssd.c.avahi-browse cups-1.7.1/backend/dnssd.c
7048cf4
--- cups-1.7.1/backend/dnssd.c.avahi-browse	2012-12-12 20:54:21.000000000 +0000
7048cf4
+++ cups-1.7.1/backend/dnssd.c	2014-02-11 12:44:54.785319324 +0000
7048cf4
@@ -95,6 +95,7 @@ static int		job_canceled = 0;
7048cf4
 static AvahiSimplePoll	*simple_poll = NULL;
7048cf4
 					/* Poll information */
7048cf4
 static int		got_data = 0;	/* Got data from poll? */
7048cf4
+static int		browsers = 0;	/* Number of running browsers */
7048cf4
 #endif /* HAVE_AVAHI */
7048cf4
 
7048cf4
 
7048cf4
@@ -345,6 +346,7 @@ main(int  argc,				/* I - Number of comm
7048cf4
     return (1);
7048cf4
   }
7048cf4
 
7048cf4
+  browsers = 6;
7048cf4
   avahi_service_browser_new(client, AVAHI_IF_UNSPEC,
7048cf4
 			    AVAHI_PROTO_UNSPEC,
7048cf4
 			    "_fax-ipp._tcp", NULL, 0,
7048cf4
@@ -559,7 +561,11 @@ main(int  argc,				/* I - Number of comm
7048cf4
       fprintf(stderr, "DEBUG: sent=%d, count=%d\n", sent, count);
7048cf4
 
7048cf4
       if (sent == cupsArrayCount(devices))
7048cf4
-	break;
7048cf4
+#ifdef HAVE_AVAHI
7048cf4
+	  if (browsers == 0)
7048cf4
+	      /* All service browsers have finished */
7048cf4
+#endif /* HAVE_AVAHI */
7048cf4
+	      break;
7048cf4
     }
7048cf4
   }
7048cf4
 
7048cf4
@@ -710,9 +716,12 @@ browse_callback(
7048cf4
 	break;
7048cf4
 
7048cf4
     case AVAHI_BROWSER_REMOVE:
7048cf4
-    case AVAHI_BROWSER_ALL_FOR_NOW:
7048cf4
     case AVAHI_BROWSER_CACHE_EXHAUSTED:
7048cf4
         break;
7048cf4
+
7048cf4
+    case AVAHI_BROWSER_ALL_FOR_NOW:
7048cf4
+	browsers--;
7048cf4
+	break;
7048cf4
   }
7048cf4
 }
7048cf4