http://cups.org/str.php?L4605+P-1+S-2+C0+I0+E0+Q100%25 https://bugs.gentoo.org/show_bug.cgi?id=549732 commit bb00c43fccb5aa2dec8e03bd9783e1ee267266a7 Author: msweet Date: Wed May 6 18:01:04 2015 +0000 The scheduler could get caught in a busy loop (STR #4605) git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@12613 a1ca3aef-8c08-0410-bb20-df032aa958be diff --git a/scheduler/client.c b/scheduler/client.c index c5a9960..50464a5 100644 --- a/scheduler/client.c +++ b/scheduler/client.c @@ -585,6 +585,17 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */ * connection and we need to shut it down... */ + if (!httpGetReady(con->http) && recv(httpGetFd(con->http), buf, 1, MSG_PEEK) < 1) + { + /* + * Connection closed... + */ + + cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on EOF."); + cupsdCloseClient(con); + return; + } + cupsdLogClient(con, CUPSD_LOG_DEBUG, "Closing on unexpected HTTP read state %s.", httpStateString(httpGetState(con->http))); cupsdCloseClient(con); @@ -1979,12 +1990,6 @@ cupsdReadClient(cupsd_client_t *con) /* I - Client to read from */ if (httpGetState(con->http) == HTTP_STATE_POST_SEND) { - /* - * Don't listen for activity until we decide to do something with this... - */ - - cupsdAddSelect(httpGetFd(con->http), NULL, NULL, con); - if (con->file >= 0) { fstat(con->file, &filestats);