[MacPorts] #52186: gnutar @1.29_0: breaks when LANG unset (was: gnutar 1.29 broken when LANG unset)

MacPorts noreply at macports.org
Thu Sep 8 00:22:20 CEST 2016


#52186: gnutar @1.29_0: breaks when LANG unset
------------------------------------+-------------------
  Reporter:  howarth.at.macports@…  |      Owner:  mww@…
      Type:  defect                 |     Status:  new
  Priority:  Normal                 |  Milestone:
 Component:  ports                  |    Version:  2.3.4
Resolution:                         |   Keywords:
      Port:  gnutar                 |
------------------------------------+-------------------
Changes (by larryv@…):

 * cc: mww@… (removed)
 * owner:  macports-tickets@… => mww@…


Old description:

> The gnutar 1.29 release causes 'gnutar -zxvf ', etc to fail when LANG is
> unset.
> This issue is discussed in the thread http://lists.gnu.org/archive/html
> /bug-tar/2016-09/msg00000.html
>
> $ gnutar -zcvf test_data.tar.gz test_data
> test_data/
> test_data/.noe.tbl.swp
> test_data/dihedral.tbl
> test_data/file.nam
> test_data/io.mc
> test_data/noe.tbl
> gnutar: test_data.tar.gz: Cannot write: Broken pipe
> gnutar: Child died with signal 11
> gnutar: Error is not recoverable: exiting now
>
> The failure backtraces as...
>
> $ ulimit -c unlimited
> $ gnutar -zcvf test_data.tar.gz test_data
> test_data/
> test_data/.noe.tbl.swp
> test_data/dihedral.tbl
> test_data/file.nam
> test_data/io.mc
> test_data/noe.tbl
> gnutar: test_data.tar.gz: Cannot write: Broken pipe
> gnutar: Child died with signal 11
> gnutar: Error is not recoverable: exiting now
> $ lldb -c /cores/core.21601 `which gnutar`
> (lldb) target create "/opt/local/bin/gnutar" --core "/cores/core.21601"
> warning: (x86_64) /cores/core.21601 load command 84 LC_SEGMENT_64 has a
> fileoff
> + filesize (0x296fe000) that extends beyond the end of the file
> (0x296fd000),
> the segment will be truncated to match
> Core file '/cores/core.21601' (x86_64) was loaded.
> (lldb) bt
> * thread #1: tid = 0x0000, 0x00007fff94ebb6d7
> libdispatch.dylib`_dispatch_queue_push_queue + 463, stop reason = signal
> SIGSTOP
>   * frame #0: 0x00007fff94ebb6d7
> libdispatch.dylib`_dispatch_queue_push_queue +
> 463
>     frame #1: 0x00007fff7478c4d0
> libdispatch.dylib`_OS_dispatch_mach_vtable + 48
>     frame #2: 0x00007fff94eb9b06
> libdispatch.dylib`_dispatch_queue_wakeup_with_qos_slow + 126
>     frame #3: 0x00007fff94ec013f
> libdispatch.dylib`_dispatch_mach_msg_send +
> 1952
>     frame #4: 0x00007fff94ebf8dc libdispatch.dylib`dispatch_mach_send +
> 262
>     frame #5: 0x00007fff89448fc9
> libxpc.dylib`xpc_connection_send_message_with_reply + 131
>     frame #6: 0x00007fff8e31ebdf
> CoreFoundation`__66-[CFPrefsSearchListSource
> generationCountFromListOfSources:count:]_block_invoke_2 + 143
>     frame #7: 0x00007fff8e31ea0d
> CoreFoundation`_CFPrefsWithDaemonConnection +
> 381
>     frame #8: 0x00007fff8e31db96
> CoreFoundation`__66-[CFPrefsSearchListSource
> generationCountFromListOfSources:count:]_block_invoke + 150
>     frame #9: 0x00007fff8e31d933 CoreFoundation`-[CFPrefsSearchListSource
> generationCountFromListOfSources:count:] + 179
>     frame #10: 0x00007fff8e31d214
> CoreFoundation`-[CFPrefsSearchListSource
> alreadylocked_copyDictionary] + 324
>     frame #11: 0x00007fff8e31ce5c
> CoreFoundation`-[CFPrefsSearchListSource
> alreadylocked_copyValueForKey:] + 60
>     frame #12: 0x00007fff8e31cdec
> CoreFoundation`___CFPreferencesCopyAppValueWithContainer_block_invoke +
> 60
>     frame #13: 0x00007fff8e314b10
> CoreFoundation`+[CFPrefsSearchListSource
> withSearchListForIdentifier:container:perform:] + 608
>     frame #14: 0x00007fff8e314867
> CoreFoundation`_CFPreferencesCopyAppValueWithContainer + 183
>     frame #15: 0x00000001021a6538
> libintl.8.dylib`_nl_language_preferences_default + 70
>     frame #16: 0x00000001021a462f libintl.8.dylib`libintl_dcigettext +
> 667
>     frame #17: 0x00000001021491f2 gnutar`sys_child_open_for_compress +
> 125
>     frame #18: 0x000000010213011f gnutar`open_archive + 603
>     frame #19: 0x00000001021355ab gnutar`create_archive + 67
>     frame #20: 0x000000010214b494 gnutar`main + 3510
>     frame #21: 0x00007fff895605ad libdyld.dylib`start + 1
>     frame #22: 0x00007fff895605ad libdyld.dylib`start + 1
> (lldb)
>
> The offending commit in tar git causing this is...
>
> commit 589ba77faf60e4632771d80e2b25d9e3778d4a3f
> Author: Sergey Poznyakoff <address at hidden>
> Date:   Sat Dec 5 16:54:26 2015 +0200
>
>     Catch compressor execution errors.
>
>     * src/misc.c (write_fatal_details): Move to buffer.c
>     * src/buffer.c (write_fatal_details): Close the archive and wait for
>     the compressor program to terminate in order to catch eventual
> execution
>     errors.
>     * src/system.c (sys_child_open_for_compress): Ignore SIGPIPE so tar
> will
>     not silently terminate when unable to write to the compressor.
>     * tests/comperr.at: New file.
>     * tests/Makefile.am: Add comperr.at
>     * tests/testsuite.at: Include comperr.at
>
> In particular, the change....
>
> diff --git a/src/system.c b/src/system.c
> index 9414233..dc0b2b0 100644
> --- a/src/system.c
> +++ b/src/system.c
> @@ -330,6 +330,7 @@ sys_child_open_for_compress (void)
>    pid_t grandchild_pid;
>    pid_t child_pid;
>
> +  signal (SIGPIPE, SIG_IGN);
>    xpipe (parent_pipe);
>    child_pid = xfork ();
>
> doesn't seem to play well with the threading in the CoreFoundation
> framework (at least when LANG is unset).
>
> A work-around would be to build gnutar 1.29 with --disable-nls to avoid
> the indirect linkage on the CoreFoundation framework through libintl or
> epoching back to gnutar 1.28.

New description:

 The gnutar 1.29 release causes 'gnutar -zxvf ', etc to fail when LANG is
 unset.
 This issue is discussed in the thread http://lists.gnu.org/archive/html
 /bug-tar/2016-09/msg00000.html
 {{{
 $ gnutar -zcvf test_data.tar.gz test_data
 test_data/
 test_data/.noe.tbl.swp
 test_data/dihedral.tbl
 test_data/file.nam
 test_data/io.mc
 test_data/noe.tbl
 gnutar: test_data.tar.gz: Cannot write: Broken pipe
 gnutar: Child died with signal 11
 gnutar: Error is not recoverable: exiting now
 }}}
 The failure backtraces as...
 {{{
 $ ulimit -c unlimited
 $ gnutar -zcvf test_data.tar.gz test_data
 test_data/
 test_data/.noe.tbl.swp
 test_data/dihedral.tbl
 test_data/file.nam
 test_data/io.mc
 test_data/noe.tbl
 gnutar: test_data.tar.gz: Cannot write: Broken pipe
 gnutar: Child died with signal 11
 gnutar: Error is not recoverable: exiting now
 $ lldb -c /cores/core.21601 `which gnutar`
 (lldb) target create "/opt/local/bin/gnutar" --core "/cores/core.21601"
 warning: (x86_64) /cores/core.21601 load command 84 LC_SEGMENT_64 has a
 fileoff
 + filesize (0x296fe000) that extends beyond the end of the file
 (0x296fd000),
 the segment will be truncated to match
 Core file '/cores/core.21601' (x86_64) was loaded.
 (lldb) bt
 * thread #1: tid = 0x0000, 0x00007fff94ebb6d7
 libdispatch.dylib`_dispatch_queue_push_queue + 463, stop reason = signal
 SIGSTOP
   * frame #0: 0x00007fff94ebb6d7
 libdispatch.dylib`_dispatch_queue_push_queue +
 463
     frame #1: 0x00007fff7478c4d0
 libdispatch.dylib`_OS_dispatch_mach_vtable + 48
     frame #2: 0x00007fff94eb9b06
 libdispatch.dylib`_dispatch_queue_wakeup_with_qos_slow + 126
     frame #3: 0x00007fff94ec013f libdispatch.dylib`_dispatch_mach_msg_send
 +
 1952
     frame #4: 0x00007fff94ebf8dc libdispatch.dylib`dispatch_mach_send +
 262
     frame #5: 0x00007fff89448fc9
 libxpc.dylib`xpc_connection_send_message_with_reply + 131
     frame #6: 0x00007fff8e31ebdf
 CoreFoundation`__66-[CFPrefsSearchListSource
 generationCountFromListOfSources:count:]_block_invoke_2 + 143
     frame #7: 0x00007fff8e31ea0d
 CoreFoundation`_CFPrefsWithDaemonConnection +
 381
     frame #8: 0x00007fff8e31db96
 CoreFoundation`__66-[CFPrefsSearchListSource
 generationCountFromListOfSources:count:]_block_invoke + 150
     frame #9: 0x00007fff8e31d933 CoreFoundation`-[CFPrefsSearchListSource
 generationCountFromListOfSources:count:] + 179
     frame #10: 0x00007fff8e31d214 CoreFoundation`-[CFPrefsSearchListSource
 alreadylocked_copyDictionary] + 324
     frame #11: 0x00007fff8e31ce5c CoreFoundation`-[CFPrefsSearchListSource
 alreadylocked_copyValueForKey:] + 60
     frame #12: 0x00007fff8e31cdec
 CoreFoundation`___CFPreferencesCopyAppValueWithContainer_block_invoke + 60
     frame #13: 0x00007fff8e314b10 CoreFoundation`+[CFPrefsSearchListSource
 withSearchListForIdentifier:container:perform:] + 608
     frame #14: 0x00007fff8e314867
 CoreFoundation`_CFPreferencesCopyAppValueWithContainer + 183
     frame #15: 0x00000001021a6538
 libintl.8.dylib`_nl_language_preferences_default + 70
     frame #16: 0x00000001021a462f libintl.8.dylib`libintl_dcigettext + 667
     frame #17: 0x00000001021491f2 gnutar`sys_child_open_for_compress + 125
     frame #18: 0x000000010213011f gnutar`open_archive + 603
     frame #19: 0x00000001021355ab gnutar`create_archive + 67
     frame #20: 0x000000010214b494 gnutar`main + 3510
     frame #21: 0x00007fff895605ad libdyld.dylib`start + 1
     frame #22: 0x00007fff895605ad libdyld.dylib`start + 1
 (lldb)
 }}}
 The offending commit in tar git causing this is...
 {{{
 commit 589ba77faf60e4632771d80e2b25d9e3778d4a3f
 Author: Sergey Poznyakoff <address at hidden>
 Date:   Sat Dec 5 16:54:26 2015 +0200

     Catch compressor execution errors.

     * src/misc.c (write_fatal_details): Move to buffer.c
     * src/buffer.c (write_fatal_details): Close the archive and wait for
     the compressor program to terminate in order to catch eventual
 execution
     errors.
     * src/system.c (sys_child_open_for_compress): Ignore SIGPIPE so tar
 will
     not silently terminate when unable to write to the compressor.
     * tests/comperr.at: New file.
     * tests/Makefile.am: Add comperr.at
     * tests/testsuite.at: Include comperr.at
 }}}
 In particular, the change....
 {{{
 diff --git a/src/system.c b/src/system.c
 index 9414233..dc0b2b0 100644
 --- a/src/system.c
 +++ b/src/system.c
 @@ -330,6 +330,7 @@ sys_child_open_for_compress (void)
    pid_t grandchild_pid;
    pid_t child_pid;

 +  signal (SIGPIPE, SIG_IGN);
    xpipe (parent_pipe);
    child_pid = xfork ();
 }}}
 doesn't seem to play well with the threading in the CoreFoundation
 framework (at least when LANG is unset).

 A work-around would be to build gnutar 1.29 with --disable-nls to avoid
 the indirect linkage on the CoreFoundation framework through libintl or
 epoching back to gnutar 1.28.

--

-- 
Ticket URL: <https://trac.macports.org/ticket/52186#comment:1>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list