diff options
Diffstat (limited to 'net-print/cups/files/cups-2.0.2-poll-CPU-loop-STR-4605.patch')
-rw-r--r-- | net-print/cups/files/cups-2.0.2-poll-CPU-loop-STR-4605.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/net-print/cups/files/cups-2.0.2-poll-CPU-loop-STR-4605.patch b/net-print/cups/files/cups-2.0.2-poll-CPU-loop-STR-4605.patch new file mode 100644 index 000000000000..86114ea650fb --- /dev/null +++ b/net-print/cups/files/cups-2.0.2-poll-CPU-loop-STR-4605.patch @@ -0,0 +1,48 @@ +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 <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> +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); |