The branch main has been updated by des:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7f04c09fe74535c1646a4af120f8f1342fe1c328

commit 7f04c09fe74535c1646a4af120f8f1342fe1c328
Author:     Dag-Erling Smørgrav <d...@freebsd.org>
AuthorDate: 2025-08-01 23:11:40 +0000
Commit:     Dag-Erling Smørgrav <d...@freebsd.org>
CommitDate: 2025-08-01 23:11:57 +0000

    rc.subr: Fix wait_for_pids
    
    It looks like this function was intended to loop and print an update
    whenever at least one of the waited-for processes terminates.  However,
    the default behavior of pwait is to block until none of the watched
    processes exist.  Use pwait -o instead so it only blocks until at least
    one process terminates, and add a test.
    
    Sponsored by:   Klara, Inc.
    Sponsored by:   NetApp, Inc.
    Reviewed by:    siderop1_netapp.com, kevans
    Differential Revision:  https://reviews.freebsd.org/D51691
---
 libexec/rc/rc.subr               |  4 ++--
 libexec/rc/tests/rc_subr_test.sh | 27 +++++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr
index a2e2e98a5087..06b1bd51384c 100644
--- a/libexec/rc/rc.subr
+++ b/libexec/rc/rc.subr
@@ -800,7 +800,7 @@ wait_for_pids()
        fi
        _prefix=
        while true; do
-               _nlist="";
+               _nlist=""
                for _j in $_list; do
                        if kill -0 $_j 2>/dev/null; then
                                _nlist="${_nlist}${_nlist:+ }$_j"
@@ -813,7 +813,7 @@ wait_for_pids()
                _list=$_nlist
                echo -n ${_prefix:-"Waiting for PIDS: "}$_list
                _prefix=", "
-               pwait $_list 2>/dev/null
+               pwait -o $_list 2>/dev/null
        done
        if [ -n "$_prefix" ]; then
                echo "."
diff --git a/libexec/rc/tests/rc_subr_test.sh b/libexec/rc/tests/rc_subr_test.sh
index 9931389e7a02..e8398c8d9b12 100644
--- a/libexec/rc/tests/rc_subr_test.sh
+++ b/libexec/rc/tests/rc_subr_test.sh
@@ -1,5 +1,8 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
 #
 # Copyright 2022 Mateusz Piotrowski <0...@freebsd.org>
+# Copyright (c) 2025 Klara, Inc.
 #
 # SPDX-License-Identifier: BSD-2-Clause
 #
@@ -104,8 +107,32 @@ oomprotect_yes_body()
                /bin/sh "$__script" "$__name" "$__pidfile" onestop
 }
 
+atf_test_case wait_for_pids_progress
+wait_for_pids_progress_head()
+{
+       atf_set "descr" "Verify that wait_for_pids prints progress updates"
+}
+wait_for_pids_progress_body()
+{
+       cat >>script <<'EOF'
+. /etc/rc.subr
+sleep 15 &
+a=$!
+sleep 10 &
+b=$!
+sleep 5 &
+c=$!
+wait_for_pids $a $b $c
+EOF
+       re="^Waiting for PIDS: [0-9]+ [0-9]+ [0-9]+"
+       re="${re}, [0-9]+ [0-9]+"
+       re="${re}, [0-9]+\.$"
+       atf_check -s exit:0 -o match:"${re}" /bin/sh script
+}
+
 atf_init_test_cases()
 {
        atf_add_test_case oomprotect_all
        atf_add_test_case oomprotect_yes
+       atf_add_test_case wait_for_pids_progress
 }

Reply via email to