public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Allison Henderson <achender@kernel.org>
To: netdev@vger.kernel.org, pabeni@redhat.com, edumazet@google.com,
	kuba@kernel.org, horms@kernel.org, linux-rdma@vger.kernel.org,
	achender@kernel.org, linux-kselftest@vger.kernel.org,
	shuah@kernel.org
Subject: [PATCH net-next v3 08/10] selftests: rds: Stop tcpdump on timeout
Date: Sun,  3 May 2026 22:41:41 -0700	[thread overview]
Message-ID: <20260504054143.4027538-9-achender@kernel.org> (raw)
In-Reply-To: <20260504054143.4027538-1-achender@kernel.org>

The timeout signal handler for the rds selftests currently just
exits when the time limit is exceeded, and forgets to stop the
network dumps.  Fix this by hoisting the tcpdump terminate commands
into a helper function, and call it from the signal handler before
exiting

Bound proc.wait() with a timeout (and fall back to proc.kill())
so an unresponsive tcpdump cannot hang the timeout path itself.

We also pop() tcpdump_procs as we iterate, so stop_pcaps() is safe
to call from both the normal cleanup path and the signal handler,
since the second invocation simply has nothing to do

Signed-off-by: Allison Henderson <achender@kernel.org>
---
 tools/testing/selftests/net/rds/test.py | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/net/rds/test.py b/tools/testing/selftests/net/rds/test.py
index a7be57ef6ece..faf751863478 100755
--- a/tools/testing/selftests/net/rds/test.py
+++ b/tools/testing/selftests/net/rds/test.py
@@ -68,11 +68,29 @@ def netns_socket(netns, *sock_args):
     u1.close()
     return socket.fromfd(fds[0], *sock_args)
 
+def stop_pcaps():
+    """Stop tcpdump processes.
+
+    We use pop() here to drain the list in the event that the test
+    completes after the signal handler is fired.  List will be empty
+    if logdir is not set
+    """
+    print("Stopping network packet captures")
+    while tcpdump_procs:
+        proc = tcpdump_procs.pop()
+        proc.terminate()
+        try:
+            proc.wait(timeout=5)
+        except subprocess.TimeoutExpired:
+            proc.kill()
+            proc.wait()
+
 def signal_handler(_sig, _frame):
     """
     Test timed out signal handler
     """
     print('Test timed out')
+    stop_pcaps()
     sys.exit(1)
 
 #Parse out command line arguments.  We take an optional
@@ -255,11 +273,7 @@ for s in sockets:
 
 print(f"getsockopt(): {nr_success}/{nr_error}")
 
-if logdir is not None:
-    print("Stopping network packet captures")
-    for p in tcpdump_procs:
-        p.terminate()
-        p.wait()
+stop_pcaps()
 
 # We're done sending and receiving stuff, now let's check if what
 # we received is what we sent.
-- 
2.25.1


  parent reply	other threads:[~2026-05-04  5:41 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-04  5:41 [PATCH net-next v3 00/10] selftests: rds: Log collection, TAP compliance and cleanups Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 01/10] selftests: rds: Increase selftest timeout Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 02/10] selftests: rds: Update USAGE string for run.sh Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 03/10] selftests: rds: Fix more pylint errors Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 04/10] selftests: rds: Add timeout flag to run.sh Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 05/10] selftests: rds: Add RDS_LOG_DIR env variable Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 06/10] selftests: rds: Add SUDO_USER " Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 07/10] selftests: rds: Remove tmp pcaps Allison Henderson
2026-05-04  5:41 ` Allison Henderson [this message]
2026-05-04  5:41 ` [PATCH net-next v3 09/10] selftests: rds: Fix gcov collection Allison Henderson
2026-05-04  5:41 ` [PATCH net-next v3 10/10] selftests: rds: Make rds selftests TAP compliant Allison Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260504054143.4027538-9-achender@kernel.org \
    --to=achender@kernel.org \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=shuah@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox