Jeff, Roland Mainz wrote a more sophisticated command substitution
test case, which can be found at
http://svn.nrubsig.org/svn/people/gisburn/scripts/tests/sun_solaris_command_substitution.sh
This might help with tracking this issue.

Olga

On Wed, Sep 5, 2012 at 3:18 PM, FELLIN, JEFFREY K (JEFF)
<j...@research.att.com> wrote:
> A similar problem to this was reported earlier this month by Alex Beylin in 
> the official UWIN 5.0 release (2012-08-06). The problem was corrected and the 
> fix is in Beta release 2012-08-20.
>
> I have verified the fix also corrects this reported problem.
>
> $ runcmd "ksh -c /tmp/rep.ksh"
> /tmp/rep.ksh
> hello all
> $ uname -a
> UWIN-XP dt-Fellin 5.0/5.1 2012-08-20 i686 x86 32/32 UWIN
>
> Jeff fellin
>
> -----Original Message-----
> From: uwin-users-boun...@research.att.com 
> [mailto:uwin-users-boun...@research.att.com] On Behalf Of Jon Pile
> Sent: Tuesday, September 04, 2012 23:41
> To: uwin-users@research.att.com
> Subject: [uwin-users] Deadlock in $( foo | bar )
>
> Hi all,
>
> Thanks again for making UWIN useful. Sorry that I only talk to the list with 
> bug reports. Here we go again...
>
> I've been running into a deadlock with spawned ksh scripts, but it took me 
> some time to isolate a reproduction that didn't depend on a ton of layered 
> "dmake" nonsense. I think I finally got it. :)
>
> The reproduction is fussy to describe but seems reliable. I first noted it 
> with the 2012-02-29 release, but it exists in the version I am using today:
>
> $ uname -a
> UWIN-W7 jpile-w510 5.0/6.1 2012-08-06 i686-64 x64 64/64 UWIN
>
> The problem arises when a ksh instance - started by CreateProcess(), not a 
> login shell - runs a "#!/bin/ksh" script that in turn uses a pipe within a 
> $(...) -spawned subshell.
>
> The following script should demonstrate the problem.
>         -------- K:\>cat \tmp\rep.ksh
>         #!/bin/ksh -p
>
>         print $0
>         # Hangs on the next line: never prints "hello all".
>         str=$(echo "hello world"| sed "s/world/all/" )
>         print $str
>         --------
>
> Running this from within a UWIN login shell does the expected:
>         ----
>         $ /tmp/rep.ksh
>         /tmp/rep.ksh
>         hello all
>         $ ksh -c /tmp/rep.ksh
>         /tmp/rep.ksh
>         hello all
>         ----
>
> However, here are two ways to cause the deadlock. One, within a ksh login 
> shell, use the 'runcmd' tool:
>         ----
>         $ runcmd "ksh -c /tmp/rep.ksh"
>         /tmp/rep.ksh
>
>         ----
>
> Two, run from the Windows command prompt:
>         ----
>         K:\>ksh -c "/tmp/rep.ksh args blah"
>         /tmp/rep.ksh
>
>         ----
>
> I initially noted this in our weird build system - we invoke many short bits 
> of ksh from within WTI dmake (which uses CreateProcess in a very similar way 
> to runcmd).
>
> When ksh is hung, procexp64 shows the following:
>
> cmd.exe
>  +- ksh.exe
>     Command line: ksh -c "/tmp/rep.ksh args blah"
>     +- ksh.exe
>        Command line: /bin/ksh -p /tmp/rep.ksh args blah
>
>
> The following are the active threads in the child-most ksh instance. I don't 
> have debug symbols for posix.dll handy, so the debugger has so far been an 
> exercise in futility.
>
> "ksh.exe":
> ntdll.dll!ZwWaitForSingleObject+0xa
> KERNELBASE.dll!WaitForSingleObjectEx+0x9c
> POSIX.dll!setgid+0x991
> POSIX.dll!read+0x149
> shell11.dll!sh_subfork+0x199e
> shell11.dll!sh_subfork+0x39bf
> shell11.dll!sh_subfork+0x3be7
> shell11.dll!sh_exec+0x216b
> shell11.dll!sh_exec+0x305e
> shell11.dll!sh_subfork+0xff6
> shell11.dll!sh_waitsafe+0x8f7b
> shell11.dll!sh_waitsafe+0x483b
> shell11.dll!sh_waitsafe+0x784f
> shell11.dll!sh_waitsafe+0x83be
> shell11.dll!nv_unset+0x19f
> shell11.dll!sh_exec+0x9a7
> shell11.dll!b_test+0x12d5
> shell11.dll!sh_main+0x69e
> ksh.exe+0x1541
> kernel32.dll!BaseThreadInitThunk+0xd
> ntdll.dll!RtlUserThreadStart+0x21
>
> "POSIX.dll!raise"
> ntdll.dll!ZwDelayExecution+0xa
> KERNELBASE.dll!SleepEx+0xb3
> POSIX.dll!raise+0x78f
> kernel32.dll!BaseThreadInitThunk+0xd
> ntdll.dll!RtlUserThreadStart+0x21
>
> "POSIX.dll!uwin_nt2unixpid"
> ntdll.dll!NtWaitForMultipleObjects+0xa
> KERNELBASE.dll!GetCurrentThread+0x36
> kernel32.dll!WaitForMultipleObjectsEx+0xb3
> USER32.dll!PeekMessageW+0x1cd
> USER32.dll!MsgWaitForMultipleObjectsEx+0x2a
> USER32.dll!MsgWaitForMultipleObjects+0x20
> POSIX.dll!seteuid+0x203e
> POSIX.dll!uwin_nt2unixpid+0x45e2
> kernel32.dll!BaseThreadInitThunk+0xd
> ntdll.dll!RtlUserThreadStart+0x21
>
> "POSIX.dll!sigset"
> ntdll.dll!NtWaitForMultipleObjects+0xa
> KERNELBASE.dll!GetCurrentThread+0x36
> kernel32.dll!WaitForMultipleObjects+0xb0
> POSIX.dll!sigset+0x9bf
> kernel32.dll!BaseThreadInitThunk+0xd
> ntdll.dll!RtlUserThreadStart+0x21
>
> "POSIX.dll!grantpt"
> ntdll.dll!ZwWaitForSingleObject+0xa
> KERNELBASE.dll!WaitForSingleObjectEx+0x9c
> POSIX.dll!grantpt+0x8fd
> kernel32.dll!BaseThreadInitThunk+0xd
> ntdll.dll!RtlUserThreadStart+0x21
>
> "POSIX.dll!brk"
> ntdll.dll!NtReadFile+0xa
> KERNELBASE.dll!ReadFile+0x7a
> kernel32.dll!ReadFile+0x59
> POSIX.dll!tcsetpgrp+0x5dca
> POSIX.dll!brk+0x2f02
> kernel32.dll!BaseThreadInitThunk+0xd
> ntdll.dll!RtlUserThreadStart+0x21
>
> Let me know if I left out anything useful.
>
> -jP
> _______________________________________________
> uwin-users mailing list
> uwin-users@research.att.com
> https://mailman.research.att.com/mailman/listinfo/uwin-users
> _______________________________________________
> uwin-users mailing list
> uwin-users@research.att.com
> https://mailman.research.att.com/mailman/listinfo/uwin-users



-- 
      ,   _                                    _   ,
     { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
.----'-/`-/     olga.kryzhanov...@gmail.com   \-`\-'----.
 `'-..-| /       http://twitter.com/fleyta     \ |-..-'`
      /\/\     Solaris/BSD//C/C++ programmer   /\/\
      `--`                                      `--`
_______________________________________________
uwin-users mailing list
uwin-users@research.att.com
https://mailman.research.att.com/mailman/listinfo/uwin-users

Reply via email to