diff --git a/sys/netinet/tcp_hpts_test.c b/sys/netinet/tcp_hpts_test.c --- a/sys/netinet/tcp_hpts_test.c +++ b/sys/netinet/tcp_hpts_test.c @@ -624,7 +624,9 @@ struct tcpcb *tp; struct tcp_hpts_entry *hpts; uint32_t timeout_usecs = 10; + int error; + error = 0; test_hpts_init(); pace = tcp_hptsi_create(&test_funcs, false); @@ -638,9 +640,9 @@ INP_WLOCK(&tp->t_inpcb); tp->t_flags2 |= TF2_HPTS_CALLS; - KTEST_EQUAL(call_counts[CCNT_SWI_SCHED], 0); + KTEST_EQUAL_GOTO(call_counts[CCNT_SWI_SCHED], 0, cleanup_locked); tcp_hpts_insert(pace, tp, timeout_usecs, NULL); - KTEST_EQUAL(tp->t_in_hpts, IHPTS_ONQUEUE); + KTEST_EQUAL_GOTO(tp->t_in_hpts, IHPTS_ONQUEUE, cleanup_locked); INP_WUNLOCK(&tp->t_inpcb); KTEST_EQUAL(call_counts[CCNT_TCP_OUTPUT], 0); KTEST_EQUAL(call_counts[CCNT_SWI_SCHED], 1); @@ -656,18 +658,22 @@ INP_WLOCK(&tp->t_inpcb); tcp_hpts_remove(pace, tp); - KTEST_EQUAL(tp->t_in_hpts, IHPTS_NONE); + KTEST_EQUAL_GOTO(tp->t_in_hpts, IHPTS_NONE, cleanup_locked); INP_WUNLOCK(&tp->t_inpcb); KTEST_EQUAL(call_counts[CCNT_TCP_OUTPUT], 0); KTEST_VERIFY(!tcp_in_hpts(tp)); KTEST_EQUAL(hpts->p_on_queue_cnt, 0); + if (false) { +cleanup_locked: + INP_WUNLOCK(&tp->t_inpcb); + } test_hpts_free_tcpcb(tp); tcp_hptsi_stop(pace); tcp_hptsi_destroy(pace); - return (0); + return (error); } /* @@ -1475,6 +1481,7 @@ struct tcp_hpts_entry *hpts; int error; + error = 0; test_hpts_init(); pace = tcp_hptsi_create(&test_funcs, false); @@ -1506,16 +1513,13 @@ KTEST_EQUAL_GOTO(hpts->p_hpts_wake_scheduled, 0, cleanup_locked); KTEST_EQUAL_GOTO(hpts->p_direct_wake, 0, cleanup_locked); KTEST_EQUAL_GOTO(call_counts[CCNT_SWI_SCHED], 0, cleanup_locked); +cleanup_locked: HPTS_UNLOCK(hpts); test_hpts_free_tcpcb(tp); tcp_hptsi_stop(pace); tcp_hptsi_destroy(pace); - return (0); - -cleanup_locked: - HPTS_UNLOCK(hpts); return (error); }