I've had my machine up running 7.0 for a week now. Today I had a bunch of problems with applications running and figured out my system was running out of file descriptors. When I did ls /proc/[1-9]*/fd, I saw that the rhnds was using a lot of file descriptors. I just restarted the daemon an hour ago and there are now 8 file descriptors open. The first is a socket, the rest are pipes.
Verified.
rhnsd is loosing 2 FDs every --interval when trying to execute rhn_check
Problem in rhns_do_action(): static int rhns_do_action(void) { [...] if (pipe(fds) != 0) { syslog(LOG_ERR, "Could not create pipe for forking process; %m"); return -1; } if ((child = fork()) == 0) { [...] } else if (child > 0) { [...] syslog(LOG_INFO, "command returned: %s", buf); free(buf); if (WIFEXITED(retval)) return WEXITSTATUS(retval); So it forgets to close the two pipe FDs if the child process (rhn_check) returns an error (like it does by default as it's unconfigured).
this is corrected in an errata, to be released shortly.