`pppx_devs_lk' used to protect `pxd_entry' list. We lock `pppx_devs_lk'
in pppx_if_output() to be sure `pxd' is not destroyed by concurrent
pppxclose() but it's useless. We destroy all corresponding `pxi' before
`pxd' and `ifnet's are already detached.
Index: sys/net/if_pppx.c
===================================================================
RCS file: /cvs/src/sys/net/if_pppx.c,v
retrieving revision 1.91
diff -u -p -r1.91 if_pppx.c
--- sys/net/if_pppx.c 6 Jul 2020 20:37:51 -0000 1.91
+++ sys/net/if_pppx.c 8 Jul 2020 09:04:31 -0000
@@ -957,7 +957,6 @@ pppx_if_output(struct ifnet *ifp, struct
th = mtod(m, struct pppx_hdr *);
th->pppx_proto = 0; /* not used */
th->pppx_id = pxi->pxi_session->ppp_id;
- rw_enter_read(&pppx_devs_lk);
error = mq_enqueue(&pxi->pxi_dev->pxd_svcq, m);
if (error == 0) {
if (pxi->pxi_dev->pxd_waiting) {
@@ -966,7 +965,6 @@ pppx_if_output(struct ifnet *ifp, struct
}
selwakeup(&pxi->pxi_dev->pxd_rsel);
}
- rw_exit_read(&pppx_devs_lk);
}
out: