[erlang-questions] os:cmd hang on OTP 18
Thu Jul 27 02:09:03 CEST 2017
I could observe the behaviour only in R18, but not in R19 and not in R20
I also could not reproduce it in debug flavour of R18 emulator, but it
reproduces reliably in release SMP variant.
The changes to os.erl between 184.108.40.206 and 19.0 include removal of os:cmd
server which might somehow be related (commit
*200247f972b012ced0c4b2c6611f091af66ebedd*). This commit *possibly* fixes
the behavior — in R19 (build 19.0 by Kerl) the behaviour does not happen.
2017-07-26 21:47 GMT+02:00 Dániel Szoboszlay <dszoboszlay@REDACTED>:
> Honestly, I didn't try with other command variations. There are many
> commands that do not hang when run from os:cmd, regardless of the OTP
> version. But this particular command does hang with one OTP version, and
> not with the other OTP version. So the difference is in OTP, and I want to
> find out what has changed.
> On Wed, 26 Jul 2017 at 21:34 Dmytro Lytovchenko <
> dmytro.lytovchenko@REDACTED> wrote:
>> Is it something lbzip2 related?
>> Did you try normal single-thread bzip2? (-j flag or --bzip2)
>> What is you use gzip? (-z or --gzip)
>> 2017-07-26 21:27 GMT+02:00 Dániel Szoboszlay <dszoboszlay@REDACTED>:
>>> I've encountered a strange problem with os:cmd when running tar and
>>> lbzip2. Steps to reproduce:
>>> # create some lbzip2 compressed data
>>> dd if=/dev/urandom of=/tmp/testfile count=10
>>> tar -cf - -C /tmp testfile | lbzip2 -6 -n 4 | dd of=/tmp/tartest status=none
>>> # try to extract the archive from Erlang with os:cmd
>>> erl -noinput -eval 'os:cmd("tar -C /tmp/ -xf /tmp/tartest --use-compress-program=lbzip2"), init:stop().'
>>> This worked fine with OTP 220.127.116.11, but with OTP 18.104.22.168 the command
>>> hangs: lbzip2 just sits in a rt_sigsuspend syscall waiting for a USR2, PIPE
>>> or XFSZ signal. And its parent, the tar process waits in a wait4 syscall
>>> for lbzip2 to terminate.
>>> I don't have at the moment any newer OTP version installed, I'm not sure
>>> how OTP 19 or 20 would behave.
>>> I tried to strace the processes, but there's too much noise, I couldn't
>>> yet figure out anything interesting there.
>>> I also tried to diff OTP 17 & 18, but os:cmd/1 and friends didn't
>>> change. I'm not sure about the port code, but at least the release notes
>>> didn't mention anything major. Or did I miss something? Does anyone have an
>>> idea what may have changed between these OTP versions?
>>> erlang-questions mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions