source-builder randomly hangs
Chris Johns
chrisj at rtems.org
Wed May 6 00:18:29 UTC 2020
On 6/5/20 2:24 am, Anders Montonen wrote:
> Hi,
>
>> On 5 May 2020, at 10:54, Chris Johns <chrisj at rtems.org> wrote:
>>
>> On 5/5/20 5:26 pm, Anders Montonen wrote:
>>>> On 4 May 2020, at 4:05, Chris Johns <chrisj at rtems.org> wrote:
>>>> Interesting and your analysis sounds right. I am not sure how this could be handled. A test case with execute.py would be a good start, see the end of the file.
>>> We could try passing “universal_newlines=True” to the subprocess.Popen() constructor. This will open stdin/stdout/stderr in text mode, using the current locale setting. Python 3.6+ allows specifying the encoding in the constructor, if that makes a difference. Another option would be to manually wrap the output streams in an io.TextIOWrapper, which is essentially what Popen() does when given any of these arguments.
>> We need to support python 2.7 but I like what you are suggesting. Any chance of a patch for execute.py? Anything that helps in this area is welcome. It is a hot spot for performance as well.
>
> I can try.
Thanks.
> In the meanwhile, here’s a reproducer which fails with Python 3:
Nice. We can merge this once you have something.
Chris
>
> diff --git a/source-builder/sb/execute.py b/source-builder/sb/execute.py
> index 06f9b7d..a719da8 100755
> --- a/source-builder/sb/execute.py
> +++ b/source-builder/sb/execute.py
> @@ -577,6 +577,7 @@ if __name__ == "__main__":
>
> cmd_shell_test = 'if "%OS%" == "Windows_NT" (echo It is WinNT) else echo Is is not WinNT'
> sh_shell_test = 'x="me"; if [ $x = "me" ]; then echo "It was me"; else "It was him"; fi'
> + long_output_test = 'echo ' + 4095*'a' + u'\U00010000'
>
> commands = {}
> commands['windows'] = {}
> @@ -587,7 +588,7 @@ if __name__ == "__main__":
> commands['windows']['csubsts'] = [('netstat %0', ['-a']),
> ('netstat %0 %1', ['-a', '-n'])]
> commands['windows']['pipe'] = ('ftp', None, 'help\nquit')
> - commands['unix']['shell'] = ['pwd', 'ls -las', './xyz', sh_shell_test]
> + commands['unix']['shell'] = ['pwd', 'ls -las', './xyz', sh_shell_test, long_output_test]
> commands['unix']['spawn'] = ['ls', 'execute.pyc', ['ls', '-i']]
> commands['unix']['cmd'] = [('date'), ('date', '-R'), ('date', ['-u', '+%d %D']),
> ('date', '-u "+%d %D %S"’)]
>
> Regards,
> Anders
>
More information about the users
mailing list