mirror of
https://git.freebsd.org/src.git
synced 2026-01-16 23:02:24 +00:00
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
This commit is contained in:
parent
2bd157bc73
commit
7f04c09fe7
2 changed files with 29 additions and 2 deletions
|
|
@ -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 "."
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
#-
|
||||
# SPDX-License-Identifier: BSD-2-Clause
|
||||
#
|
||||
# Copyright 2022 Mateusz Piotrowski <0mp@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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue