1#!/bin/sh 2# Test for sort --compress hang 3 4# Copyright (C) 2010-2023 Free Software Foundation, Inc. 5 6# This program is free software: you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation, either version 3 of the License, or 9# (at your option) any later version. 10 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <https://www.gnu.org/licenses/>. 18 19. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src 20print_ver_ sort 21very_expensive_ 22 23cat <<EOF >compress || framework_failure_ 24#!$SHELL 25tr 41 14 || exit 26touch ok 27EOF 28 29chmod +x compress 30 31seq -w 200000 > exp || fail=1 32tac exp > in || fail=1 33 34# When the bug occurs, 'sort' hangs forever. When it doesn't occur, 35# 'sort' could be running slowly on an overburdened machine. 36# On a circa-2010 Linux server using NFS, a successful test completes 37# in about 170 seconds, so specify 1700 seconds as a safety margin. 38# Note --foreground will not kill any of the "compress" sub processes, 39# assuming they're well behaved and exit in a timely manner, but will 40# allow this command to be responsive to Ctrl-C 41timeout --foreground 1700 sort --compress-program=./compress -S 1k in > out \ 42 || fail=1 43 44compare exp out || fail=1 45test -f ok || fail=1 46rm -f compress ok 47 48# If $TMPDIR is relative, give subprocesses time to react when 'sort' exits. 49# Otherwise, under NFS, when 'sort' unlinks the temp files and they 50# are renamed to .nfsXXXX instead of being removed, the parent cleanup 51# of this directory will fail because the files are still open. 52case $TMPDIR in 53/*) ;; 54*) sleep 1;; 55esac 56 57Exit $fail 58