bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: coreutils-6.0: numerous test failures on MacOS X


From: Bruno Haible
Subject: Re: coreutils-6.0: numerous test failures on MacOS X
Date: Mon, 28 Aug 2006 15:02:28 +0200
User-agent: KMail/1.9.1

> > + dd iflag=nofollow if=dd-sym.20477 count=0
> > + fail=1
> > ...
> > It seems that the nofollow test doesn't work?
> 
> What does ktrace tell you about the system calls that were executed?
> I assume MacOS X has ktrace?
> 
>   cd src
>   ln -s dd.c sym
>   ktrace ./dd iflag=nofollow if=sym count=0
>   kdump

Mine says:

  8552 dd       CALL  open(0xbffffb57,0x100,0)
  8552 dd       NAMI  "sym"
  8552 dd       RET   open 0

and 0x100 is indeed the value of O_NOFOLLOW in <sys/fcntl.h>. So it appears
that O_NOFOLLOW exists but has no effect.

Shouldn't be too hard to write a configure against it.

> Your email didn't mention tail/tail-tests after that

$ VERBOSE=yes make check
...
passed obs-plus-c1(_POSIX2_VERSION=199209:F)
passed obs-plus-c1(_POSIX2_VERSION=199209:|)
passed obs-plus-c1(_POSIX2_VERSION=199209:<)
passed obs-plus-c2(_POSIX2_VERSION=199209:F)
passed obs-plus-c2(_POSIX2_VERSION=199209:|)
passed obs-plus-c2(_POSIX2_VERSION=199209:<)
passed obs-c3(F)
passed obs-c3(|)
passed obs-c3(<)
passed obs-c4(F)
passed obs-c4(|)
passed obs-c4(<)
passed obs-c5(F)
passed obs-c5(|)
passed obs-c5(<)
passed obs-l1(F)
passed obs-l1(|)
passed obs-l1(<)
passed obs-l2(F)
passed obs-l2(|)
passed obs-l2(<)
passed obs-l3(F)
passed obs-l3(|)
passed obs-l3(<)
passed obs-plus-l4(_POSIX2_VERSION=199209:F)
passed obs-plus-l4(_POSIX2_VERSION=199209:|)
passed obs-plus-l4(_POSIX2_VERSION=199209:<)
passed obs-plus-l5(_POSIX2_VERSION=199209:F)
passed obs-plus-l5(_POSIX2_VERSION=199209:|)
passed obs-plus-l5(_POSIX2_VERSION=199209:<)
passed obs-1(F)
passed obs-1(|)
passed obs-1(<)
passed obs-2(F)
passed obs-2(|)
passed obs-2(<)
passed obs-3(F)
passed obs-3(|)
passed obs-3(<)
passed obs-plus-4(_POSIX2_VERSION=199209:F)
passed obs-plus-4(_POSIX2_VERSION=199209:|)
passed obs-plus-4(_POSIX2_VERSION=199209:<)
passed obs-plus-5(_POSIX2_VERSION=199209:F)
passed obs-plus-5(_POSIX2_VERSION=199209:|)
passed obs-plus-5(_POSIX2_VERSION=199209:<)
passed obs-plus-x1(_POSIX2_VERSION=199209:F)
passed obs-plus-x1(_POSIX2_VERSION=199209:|)
passed obs-plus-x1(_POSIX2_VERSION=199209:<)
passed obs-plus-x2(_POSIX2_VERSION=199209:F)
passed obs-plus-x2(_POSIX2_VERSION=199209:|)
passed obs-plus-x2(_POSIX2_VERSION=199209:<)
passed obs-l(F)
passed obs-l(|)
passed obs-l(<)
passed obs-b(F)
passed obs-b(|)
passed obs-b(<)
passed err-1(|)
passed err-1(<)
passed err-2(F)
passed err-2(|)
passed err-2(<)
passed err-3(|)
passed err-3(<)
passed err-4(F)
passed err-4(|)
passed err-4(<)
passed err-5(F)
passed err-5(|)
passed err-5(<)
passed err-6(_POSIX2_VERSION=200112:F)
passed err-6(_POSIX2_VERSION=200112:|)
passed err-6(_POSIX2_VERSION=200112:<)
passed minus-1(_POSIX2_VERSION=199209:|)
passed minus-1(_POSIX2_VERSION=199209:<)
passed minus-2(_POSIX2_VERSION=199209:|)
passed minus-2(_POSIX2_VERSION=199209:<)
passed c-2(_POSIX2_VERSION=200112:F)
passed c-2(_POSIX2_VERSION=200112:|)
passed c-2(_POSIX2_VERSION=200112:<)
passed c-2-minus(F)
passed c-2-minus(|)
passed c-2-minus(<)
passed c2(F)
passed c2(|)
passed c2(<)
passed c2-minus(F)
passed c2-minus(|)
passed c2-minus(<)
passed n-1(F)
passed n-1(|)
passed n-1(<)
passed n-2(F)
passed n-2(|)
passed n-2(<)
passed n-3(F)
passed n-3(|)
passed n-3(<)
passed n-4(F)
passed n-4(|)
passed n-4(<)
passed n-4a(F)
passed n-4a(|)
passed n-4a(<)
passed n-5(F)
passed n-5(|)
passed n-5(<)
passed n-5a(F)
passed n-5a(|)
passed n-5a(<)
passed n-5b(F)
passed n-5b(|)
passed n-5b(<)

The process that hangs has the command line "tail -f -n 1". The debugger
backtrace is:

#0  0x9647f808 in clock_sleep_trap ()
#1  0x9647a9f8 in nanosleep ()
#2  0x00008dc8 in xnanosleep (seconds=0) at xnanosleep.c:101
#3  0x000046b0 in tail_forever (f=0x300930, nfiles=1, sleep_interval=1) at 
tail.c:1105
#4  0x0000595c in main (argc=999999999, argv=0x1) at tail.c:1689

In frame #2:
(gdb) print ts_sleep
$1 = {
  tv_sec = 1, 
  tv_nsec = 0
}

Single-stepping with "next" yields a loop in tail.c:

988           bool any_input = false;
(gdb) 
990           for (i = 0; i < nfiles; i++)
(gdb) 
998               if (f[i].ignore)
(gdb) 
1001              if (f[i].fd < 0)
(gdb) 
1008              name = pretty_name (&f[i]);
(gdb) 
1011              if (f[i].blocking != blocking)
(gdb) 
1008              name = pretty_name (&f[i]);
(gdb) 
1009              mode = f[i].mode;
(gdb) 
1011              if (f[i].blocking != blocking)
(gdb) 
1033              if (!f[i].blocking)
(gdb) 
1083              bytes_read = dump_remainder (name, fd,
(gdb) 
1086              any_input |= (bytes_read != 0);
(gdb) 
1087              f[i].size += bytes_read;
(gdb) 
990           for (i = 0; i < nfiles; i++)
(gdb) 
1090          if (! any_live_files (f, nfiles) && ! reopen_inaccessible_files)
(gdb) 
1096          if ((!any_input | blocking) && fflush (stdout) != 0)
(gdb) 
1100          if (!any_input)
(gdb) 
1102              if (writer_is_dead)
(gdb) 
1105              if (xnanosleep (sleep_interval))
(gdb) 
1110              writer_is_dead = (pid != 0
(gdb) 
988           bool any_input = false;
(gdb) 
990           for (i = 0; i < nfiles; i++)
(gdb) 
998               if (f[i].ignore)
(gdb) 
1001              if (f[i].fd < 0)
(gdb) 
1008              name = pretty_name (&f[i]);
(gdb) 
1011              if (f[i].blocking != blocking)
(gdb) 
1008              name = pretty_name (&f[i]);
(gdb) 
1009              mode = f[i].mode;
(gdb) 
1011              if (f[i].blocking != blocking)
(gdb) 
1033              if (!f[i].blocking)
(gdb) 
1083              bytes_read = dump_remainder (name, fd,
(gdb) 
1086              any_input |= (bytes_read != 0);
(gdb) 
1087              f[i].size += bytes_read;
(gdb) 
990           for (i = 0; i < nfiles; i++)
(gdb) 
1090          if (! any_live_files (f, nfiles) && ! reopen_inaccessible_files)
(gdb) 
1096          if ((!any_input | blocking) && fflush (stdout) != 0)
(gdb) 
1100          if (!any_input)
(gdb) 
1102              if (writer_is_dead)
(gdb) 
1105              if (xnanosleep (sleep_interval))
(gdb) 
1110              writer_is_dead = (pid != 0


Bruno




reply via email to

[Prev in Thread] Current Thread [Next in Thread]