__testapp_validate_traffic() calls exit_with_error() on failures. This
exits the program immediately. It prevents the following tests from
running and isn't compliant with the CI.

Return TEST_FAILURE instead of calling exit_with_error().
Release the resource of the 1st thread if a failure happens between its
creation and the creation of the second thread.

Reviewed-by: Maciej Fijalkowski <[email protected]>
Signed-off-by: Bastien Curutchet (eBPF Foundation) 
<[email protected]>
---
 tools/testing/selftests/bpf/test_xsk.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/bpf/test_xsk.c 
b/tools/testing/selftests/bpf/test_xsk.c
index 
19182c1d9730191276084acd35da7118780b273e..0b69438826e3bb617f488aa829d5f8eb98d2b0f5
 100644
--- a/tools/testing/selftests/bpf/test_xsk.c
+++ b/tools/testing/selftests/bpf/test_xsk.c
@@ -1772,12 +1772,12 @@ static int __testapp_validate_traffic(struct test_spec 
*test, struct ifobject *i
        err = test_spec_set_mtu(test, test->mtu);
        if (err) {
                ksft_print_msg("Error, could not set mtu.\n");
-               exit_with_error(err);
+               return TEST_FAILURE;
        }
 
        if (ifobj2) {
                if (pthread_barrier_init(&barr, NULL, 2))
-                       exit_with_error(errno);
+                       return TEST_FAILURE;
                pkt_stream_reset(ifobj2->xsk->pkt_stream);
        }
 
@@ -1791,8 +1791,12 @@ static int __testapp_validate_traffic(struct test_spec 
*test, struct ifobject *i
 
        if (ifobj2) {
                pthread_barrier_wait(&barr);
-               if (pthread_barrier_destroy(&barr))
-                       exit_with_error(errno);
+               if (pthread_barrier_destroy(&barr)) {
+                       pthread_kill(t0, SIGUSR1);
+                       clean_sockets(test, ifobj1);
+                       clean_umem(test, ifobj1, NULL);
+                       return TEST_FAILURE;
+               }
 
                /*Spawn TX thread */
                pthread_create(&t1, NULL, ifobj2->func_ptr, test);

-- 
2.51.0


Reply via email to