After running with my patch for a while, I saw the same behavior - cupsd running at 100% CPU. In our environment, we're running only clients, so the inability to bind port 631 wasn't immediately a problem. So, it looks like my "quick fix" is a bust.
My next thought is that this might actually be a CUPS problem. I looked through the source code a bit and in scheduler/dirsvc.c, the poller is spawned with:
if (cupsdStartProcess(polld, argv, envp, -1, -1, statusfds[1], -1, 0, &(pollp->pid)) < 0)
And the actual cupsdStartProcess function in scheduler/process.c takes these arguments:
cupsdStartProcess(
const char *command, /* I - Full path to command */
char *argv[], /* I - Command-line arguments */
char *envp[], /* I - Environment */
int infd, /* I - Standard input file descriptor */
int outfd, /* I - Standard output file descriptor */
int errfd, /* I - Standard error file descriptor */
int backfd, /* I - Backchannel file descriptor */
int root, /* I - Run as root? */
int *pid) /* O - Process ID */
This would seem to indicate that the polld process shouldn't be spawned as root (argument 8 = 0 ), but it is. I'm not much of a C programmer, so I could be completely off-base here, but this seems to be at least close to the problem. I may post this to the CUPS list and see if anyone knows anything about it.
After running with my patch for a while, I saw the same behavior - cupsd running at 100% CPU. In our environment, we're running only clients, so the inability to bind port 631 wasn't immediately a problem. So, it looks like my "quick fix" is a bust.
My next thought is that this might actually be a CUPS problem. I looked through the source code a bit and in scheduler/dirsvc.c, the poller is spawned with: ess(polld, argv, envp, -1, -1, statusfds[1], -1,
0, &(pollp->pid)) < 0)
if (cupsdStartProc
And the actual cupsdStartProcess function in scheduler/process.c takes these arguments:
cupsdStartProcess(
const char *command, /* I - Full path to command */
char *argv[], /* I - Command-line arguments */
char *envp[], /* I - Environment */
int infd, /* I - Standard input file descriptor */
int outfd, /* I - Standard output file descriptor */
int errfd, /* I - Standard error file descriptor */
int backfd, /* I - Backchannel file descriptor */
int root, /* I - Run as root? */
int *pid) /* O - Process ID */
This would seem to indicate that the polld process shouldn't be spawned as root (argument 8 = 0 ), but it is. I'm not much of a C programmer, so I could be completely off-base here, but this seems to be at least close to the problem. I may post this to the CUPS list and see if anyone knows anything about it.