Description of problem: Running strace -E LC_ALL=C dd if=/dev/zero of=/dev/null count=1 bs=1 shows that dd tries to close file descriptor 1 twice: [...] write(2, "1 byte (1 B) copied", 191 byte (1 B) copied) = 19 write(2, ", 0.000151196 s, 6.6 kB/s\n", 26, 0.000151196 s, 6.6 kB/s ) = 26 close(1) = -1 EBADF (Bad file descriptor) close(2) = 0 Version-Release number of selected component (if applicable): coreutils-6.10-11.fc9 coreutils-6.9-13.fc8 How reproducible: always Steps to Reproduce: 1.run above command 2. 3. Actual results: double close Expected results: only one close Additional info:
Thanks for report. Caused by atexit(close_stdout). This atexit close is (from comments) because of possible exit in external function for parsing long options. Second one is in cleanup function (from comments) necessary for call from signal handler. Maybe the easiest solution would be to differ between signal handling cleanup and exit/quit cleanup (two functions or boolean for decision)... Any other ideas?
Thanks for the report. For the record, there was no harm in that double close, other than the negligible overhead of the failing close syscall. In spite of that, I've changed dd.c to avoid the unnecessary close_stdout call when possible: http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/12901
Built as coreutils-6.10-12.fc9 , closing RAWHIDE.