summaryrefslogtreecommitdiff
path: root/tests/tail-2
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2009-09-06 09:39:31 +0200
committerJim Meyering <meyering@redhat.com>2009-09-06 09:40:43 +0200
commitd54376db68adf655b5f09855442b2983fc2f4f3e (patch)
tree957e98a9660c3dee1af27a3300aa4d451732731b /tests/tail-2
parentaf054f80b24d1ed3ac0cb9c4593eac5f0a3c5788 (diff)
downloadcoreutils-d54376db68adf655b5f09855442b2983fc2f4f3e.tar.xz
tail: flush initial output before possibly blocking
* src/tail.c (main): Flush any output from tail_file, before calling tail_forever_inotify, which can block. * tests/tail-2/flush-initial: New file. Test for the bug. * tests/Makefile.am (TESTS): Add tail-2/flush-initial. * NEWS (Bug fixes): Mention it. This bug was introduced in coreutils-7.5 via commit ae494d4b, 2009-06-02, "tail: use inotify if it is available".
Diffstat (limited to 'tests/tail-2')
-rwxr-xr-xtests/tail-2/flush-initial41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/tail-2/flush-initial b/tests/tail-2/flush-initial
new file mode 100755
index 000000000..2deff84f3
--- /dev/null
+++ b/tests/tail-2/flush-initial
@@ -0,0 +1,41 @@
+#!/bin/sh
+# inotify-based tail -f didn't flush its initial output before blocking
+
+# Copyright (C) 2009 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if test "$VERBOSE" = yes; then
+ set -x
+ tail --version
+fi
+
+. $srcdir/test-lib.sh
+
+fail=0
+echo line > in || fail=1
+stdbuf --output=1K tail -f in > out &
+tail_pid=$!
+
+# Wait for the backgrounded `tail' to start.
+while :; do
+ env kill -0 $tail_pid && break
+ sleep .1
+done
+
+test -s out || fail=1
+
+kill $tail_pid
+
+Exit $fail