Paul Eggert wrote:

Guillaume Chazarain <[EMAIL PROTECTED]> writes:


With recent linux distributions (using NPTL), dd can hang waiting on
a futex when being killed.


[...]
When "dd" gets a signal, it closes the input and output files, prints
some statistics, and exits. If it gets a second signal it exits
immediately. I don't offhand see why this could cause a hang that was
dd's fault.


Actually, it does a bit more. As it prints a message for the first time, it has to
initialize gettext, and I'm not sure this qualifies for the "do as little as possible
in a signal handler" rule.


On a side not, the problem disappears with the LD_ASSUME_KERNEL=2.4 trick.

I workaround the problem with this:

--- coreutils-5.3.0/src/dd.c
+++ coreutils-5.3.0/src/dd.c
@@ -1535,6 +1535,7 @@ main (int argc, char **argv)
#endif
    }

+  _("Do not initialize gettext in a signal handler");
  install_handler (SIGINT, interrupt_handler);
  install_handler (SIGQUIT, interrupt_handler);
  install_handler (SIGPIPE, interrupt_handler);

but you don't have to tell me you don't like it, I know.

Regards.

--
Guillaume


_______________________________________________ Bug-coreutils mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-coreutils

Reply via email to