[PATCH v2] 089: fix error caused by weird stdout buffer handling
Lukas Czerner
lczerner at redhat.com
Wed Feb 16 04:40:13 CST 2011
On Wed, 2 Feb 2011, Lukas Czerner wrote:
> (v2: Get rid of the diff mambo-jambo in the commit description)
>
> We have hit the error while running 089.
>
> FSTYP -- ext3
> PLATFORM -- Linux/x86_64 localhost 2.6.32-109.el6.x86_64
>
> ...
> ...
> completed 50 iterations
> completed 50 iterations
> completed 50 iterations
> -completed 50 iterations
> completed 10000 iterations
> directory entries:
> t_mtab
> Ran: 089
> Failures: 089
> Failed 1 of 1 tests
>
> This is not very easily reproducible, however one can hit it
> eventually when running 089 in the loop. The problem is apparently, that
> the output might get lost, probably due to some stdio buffer weirdness.
>
> This commit workaround the issue by adding an optional argument to the
> t_mtab to specify output file. The t_mtab output is then appended to a
> file which content is then printed to the stdout as it would if no
> output file is used.
>
> With this commit applied the problem is no longer reproducible.
ping
>
> Signed-off-by: Lukas Czerner <lczerner at redhat.com>
> ---
> 089 | 9 ++++++---
> src/t_mtab.c | 8 +++++++-
> 2 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/089 b/089
> index e28e099..1714bec 100755
> --- a/089
> +++ b/089
> @@ -28,6 +28,7 @@ owner=nathans at sgi.com
> seq=`basename $0`
> echo "QA output created by $seq"
>
> +mtab_output=$TEST_DIR/mtab_output
> here=`pwd`
> tmp=/tmp/$$
> status=1 # failure is the default!
> @@ -62,10 +63,12 @@ mount > t_mtab
>
> mtab()
> {
> - $here/src/t_mtab 50 &
> - $here/src/t_mtab 50 &
> - $here/src/t_mtab 50 &
> + rm -f $mtab_output
> + $here/src/t_mtab 50 $mtab_output &
> + $here/src/t_mtab 50 $mtab_output &
> + $here/src/t_mtab 50 $mtab_output &
> wait
> + cat $mtab_output
>
> $here/src/t_mtab 10000
>
> diff --git a/src/t_mtab.c b/src/t_mtab.c
> index 2931887..9bca954 100644
> --- a/src/t_mtab.c
> +++ b/src/t_mtab.c
> @@ -263,6 +263,7 @@ update_mtab (void)
> int main(int argc, char **argv)
> {
> int i, stop = 100000;
> + FILE *fout = NULL;
>
> if (argc > 1)
> stop = atoi(argv[1]);
> @@ -270,6 +271,11 @@ int main(int argc, char **argv)
> for (i = 0; i < stop; i++) {
> update_mtab();
> }
> - printf("completed %d iterations\n", stop);
> +
> + if (argc > 2)
> + fout = fopen(argv[2],"a");
> + if (!fout)
> + fout = stdout;
> + fprintf(fout, "completed %d iterations\n", stop);
> return 0;
> }
>
--
More information about the xfs
mailing list