Red Hat Bugzilla – Bug 436368
Double close in dd
Last modified: 2008-03-11 08:55:49 EDT
Description of problem:
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):
Steps to Reproduce:
1.run above command
only one close
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
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:
Built as coreutils-6.10-12.fc9 , closing RAWHIDE.