pppd: Close already open ppp descriptors When using the kernel PPPoE driver in conjunction with the "persist" option, the already open descriptor to /dev/ppp is not closed when the link is reestablished. This eventually leads to high CPU load because the stray descriptors are always reported as ready by select(). This patch closes the descriptor if it is already open when establishing a new connection. It originated from the Debian project. Signed-off-by: Jo-Philipp Wich --- a/pppd/sys-linux.c +++ b/pppd/sys-linux.c @@ -458,6 +458,13 @@ int generic_establish_ppp (int fd) if (new_style_driver) { int flags; + /* if a ppp_fd is already open, close it first */ + if(ppp_fd > 0) { + close(ppp_fd); + remove_fd(ppp_fd); + ppp_fd = -1; + } + /* Open an instance of /dev/ppp and connect the channel to it */ if (ioctl(fd, PPPIOCGCHAN, &chindex) == -1) { error("Couldn't get channel number: %m");