[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#8544: tail bug - starting in 7.5 "tail --follow=name" behaves like "
From: |
Tim Underwood |
Subject: |
bug#8544: tail bug - starting in 7.5 "tail --follow=name" behaves like "tail --follow=name --retry" |
Date: |
Mon, 25 Apr 2011 09:01:00 -0700 |
Thanks for the quick fix Jim! I verified the bug is now fixed in the git
repository.
-Tim
On Sun, Apr 24, 2011 at 2:22 PM, Jim Meyering <address@hidden> wrote:
> Thanks again.
> Here's the fix I expect to use:
>
> From 79a476abb35a69f409e2848019c8ebc24cc687cf Mon Sep 17 00:00:00 2001
> From: Jim Meyering <address@hidden>
> Date: Sun, 24 Apr 2011 23:20:01 +0200
> Subject: [PATCH] tail --follow=name no longer implies --retry
>
> * src/tail.c (tail_forever_inotify): Just as without inotify,
> tail --follow=name now terminates when the last tailed-by-name file
> is unlinked or moved aside. This bug was introduced on 2009-06-15
> via commit ae494d4b, "tail: use inotify if it is available".
> Reported by Tim Underwood in
> http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22286
> * NEWS (Bug fixes): Mention this.
> * tests/tail-2/follow-name: Test for this.
> * tests/Makefile.am (TESTS): Add it.
> ---
> NEWS | 5 +++++
> THANKS.in | 1 +
> src/tail.c | 10 ++++++++++
> tests/Makefile.am | 1 +
> tests/tail-2/follow-name | 32 ++++++++++++++++++++++++++++++++
> 5 files changed, 49 insertions(+), 0 deletions(-)
> create mode 100755 tests/tail-2/follow-name
>
> diff --git a/NEWS b/NEWS
> index 7bc2ef3..3307e71 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -2,6 +2,11 @@ GNU coreutils NEWS -*-
> outline -*-
>
> * Noteworthy changes in release ?.? (????-??-??) [?]
>
> +** Bug fixes
> +
> + tail's --follow=name option no longer implies --retry on systems
> + with inotify support. [bug introduced in coreutils-7.5]
> +
> ** Changes in behavior
>
> cp's extent-based (FIEMAP) copying code is more reliable in the face
> diff --git a/THANKS.in b/THANKS.in
> index 342a52c..d1ca380 100644
> --- a/THANKS.in
> +++ b/THANKS.in
> @@ -560,6 +560,7 @@ Tim J. Robbins address@hidden
> Tim Mooney address@hidden
> Tim Ryan address@hidden
> Tim Smithers address@hidden
> +Tim Underwood address@hidden
> Tim Waugh address@hidden
> Toby Peterson address@hidden
> Todd A. Jacobs address@hidden
> diff --git a/src/tail.c b/src/tail.c
> index 88fbd10..e6d8164 100644
> --- a/src/tail.c
> +++ b/src/tail.c
> @@ -1432,6 +1432,16 @@ tail_forever_inotify (int wd, struct File_spec *f,
> size_t n_files,
> struct File_spec *fspec;
> struct inotify_event *ev;
>
> + /* When following by name without --retry, and the last file has
> + been unlinked or renamed-away, diagnose it and return. */
> + if (follow_mode == Follow_name
> + && ! reopen_inaccessible_files
> + && hash_get_n_entries (wd_to_name) == 0)
> + {
> + error (0, 0, _("no files remaining"));
> + return false;
> + }
> +
> /* When watching a PID, ensure that a read from WD will not block
> indefinitely. */
> if (pid)
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 685eb52..2f4a561 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -489,6 +489,7 @@ TESTS = \
> tail-2/assert-2 \
> tail-2/big-4gb \
> tail-2/flush-initial \
> + tail-2/follow-name \
> tail-2/follow-stdin \
> tail-2/pipe-f \
> tail-2/pipe-f2 \
> diff --git a/tests/tail-2/follow-name b/tests/tail-2/follow-name
> new file mode 100755
> index 0000000..ef9434a
> --- /dev/null
> +++ b/tests/tail-2/follow-name
> @@ -0,0 +1,32 @@
> +#!/bin/sh
> +# ensure that --follow=name does not imply --retry
> +
> +# Copyright (C) 2011 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/>.
> +
> +. "${srcdir=.}/init.sh"; path_prepend_ ../src
> +print_ver_ tail
> +
> +cat <<\EOF > exp || framework_failure_
> +tail: cannot open `no-such' for reading: No such file or directory
> +tail: no files remaining
> +EOF
> +
> +timeout 10 tail --follow=name no-such > out 2> err
> +test $? = 1 || fail=1
> +
> +compare err exp || fail=1
> +
> +Exit $fail
> --
> 1.7.5.rc3.316.gd1ff9
>