12345678910111213141516171819202122232425262728 |
- 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 <jow@openwrt.org>
- --- 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");
|