Pārlūkot izejas kodu

Minor changes.

* src/tar.c (main): Ignore SIGPIPE.
* src/system.c (sys_child_open_for_compress)
(sys_child_open_for_uncompress): Reset SIGPIPE
in child to default.
* tests/remfiles01.at: Avoid race conditions.
* tests/remfiles02.at: Likewise.
Sergey Poznyakoff 15 gadi atpakaļ
vecāks
revīzija
0c6c288b53
4 mainītis faili ar 22 papildinājumiem un 10 dzēšanām
  1. 4 2
      src/system.c
  2. 1 1
      src/tar.c
  3. 11 2
      tests/remfiles01.at
  4. 6 5
      tests/remfiles02.at

+ 4 - 2
src/system.c

@@ -331,7 +331,8 @@ sys_child_open_for_compress (void)
   /* The new born child tar is here!  */
 
   set_program_name (_("tar (child)"));
-
+  signal (SIGPIPE, SIG_DFL);
+  
   xdup2 (parent_pipe[PREAD], STDIN_FILENO);
   xclose (parent_pipe[PWRITE]);
 
@@ -474,7 +475,8 @@ sys_child_open_for_uncompress (void)
   /* The newborn child tar is here!  */
 
   set_program_name (_("tar (child)"));
-
+  signal (SIGPIPE, SIG_DFL);
+  
   xdup2 (parent_pipe[PWRITE], STDOUT_FILENO);
   xclose (parent_pipe[PREAD]);
 

+ 1 - 1
src/tar.c

@@ -2556,7 +2556,7 @@ main (int argc, char **argv)
   obstack_init (&argv_stk);
 
   /* Ensure default behavior for some signals */
-  signal (SIGPIPE, SIG_DFL);
+  signal (SIGPIPE, SIG_IGN);
   /* System V fork+wait does not work if SIGCHLD is ignored.  */
   signal (SIGCHLD, SIG_DFL);
 

+ 11 - 2
tests/remfiles01.at

@@ -40,11 +40,20 @@ chmod 0 a
 genfile --file b
 mkdir c
 
-tar -c -f a -z --remove-files b c
+# Depending on when the SIGPIPE gets delivered, the invocation below
+# may finish with either
+#  tar: a: Cannot write: Broken pipe
+# or
+#  tar: Child returned status 2
 
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
 find . | sort
+exit $EC
 ],
-[0],
+[2],
 [.
 ./a
 ./b

+ 6 - 5
tests/remfiles02.at

@@ -39,11 +39,14 @@ mkdir a
 genfile --file b
 mkdir c
 
-tar -c -f a -z --remove-files b c
-
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
 find . | sort
+exit $EC
 ],
-[0],
+[2],
 [.
 ./a
 ./b
@@ -51,8 +54,6 @@ find . | sort
 ],
 [tar (child): a: Cannot open: Is a directory
 tar (child): Error is not recoverable: exiting now
-tar: Child returned status 2
-tar: Error is not recoverable: exiting now
 ])
 
 AT_CLEANUP