Check the inp_flags under inp lock. Looks like the race was hidden
before, the conversion of tcbinfo to CK_LIST have uncovered it.
This commit is contained in:
parent
95dce07dea
commit
b8ab659396
@ -2019,9 +2019,11 @@ tcp_drain(void)
|
|||||||
*/
|
*/
|
||||||
INP_INFO_WLOCK(&V_tcbinfo);
|
INP_INFO_WLOCK(&V_tcbinfo);
|
||||||
CK_LIST_FOREACH(inpb, V_tcbinfo.ipi_listhead, inp_list) {
|
CK_LIST_FOREACH(inpb, V_tcbinfo.ipi_listhead, inp_list) {
|
||||||
if (inpb->inp_flags & INP_TIMEWAIT)
|
|
||||||
continue;
|
|
||||||
INP_WLOCK(inpb);
|
INP_WLOCK(inpb);
|
||||||
|
if (inpb->inp_flags & INP_TIMEWAIT) {
|
||||||
|
INP_WUNLOCK(inpb);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ((tcpb = intotcpcb(inpb)) != NULL) {
|
if ((tcpb = intotcpcb(inpb)) != NULL) {
|
||||||
tcp_reass_flush(tcpb);
|
tcp_reass_flush(tcpb);
|
||||||
tcp_clean_sackreport(tcpb);
|
tcp_clean_sackreport(tcpb);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user