disksup crashing when spawned/forked from process
Christopher Meiklejohn <[email protected]> Thu, 23 Nov 2017 21:54:09 +0000
| Newsgroups | gmane.comp.lang.erlang.general,gmane.comp.lang.erlang.bugs |
|---|---|
| Message-ID | <CAGVmt0Uf+soLmpZBLi=707=mpbx5khUotSY9A50QvQ5mGRdo1A@mail.gmail.com> |
--===============0584333143936214229==
Content-Type: multipart/alternative; boundary="f403043c54a473c428055ead7af7"
--f403043c54a473c428055ead7af7
Content-Type: text/plain; charset="UTF-8"
I've got an Erlang/Elixir application that's being invoked via
child_process in Node.js. Outside of Node.js, it's fine. Inside, the node
crashes on startup with a badarg from disksup -- this is because the
application requires that os_mon be started.
A trivial reproducer is the following:
var child_process = require('child_process');
child_process.spawn(path_to_app_executable, ['foreground'],
{ stdio: ignore,
detached: true });
Included is the crash:
2017-11-23 21:26:04 =ERROR REPORT====
** Generic server disksup terminating
** Last message in was timeout
** When Server state ==
[{data,[{"OS",{unix,linux}},{"Timeout",1800000},{"Threshold",80},{"D
iskData",[]}]}]
** Reason for termination ==
** {badarg,[{erlang,port_close,[#Port<0.2000>],[]},{disksup,terminate,2,[{file,"disksup.erl"
},{line,169}]},{gen_server,try_terminate,3,[{file,"gen_server.erl"},{line,629}]},{gen_server
,terminate,7,[{file,"gen_server.erl"},{line,795}]},{proc_lib,init_p_do_apply,3,[{file,"proc_
lib.erl"},{line,247}]}]}
2017-11-23 21:26:04 =CRASH REPORT====
crasher:
initial call: disksup:init/1
pid: <0.913.0>
registered_name: disksup
exception exit:
{{badarg,[{erlang,port_close,[#Port<0.2000>],[]},{disksup,terminate,2,[{
file,"disksup.erl"},{line,169}]},{gen_server,try_terminate,3,[{file,"gen_server.erl"},{line,
629}]},{gen_server,terminate,7,[{file,"gen_server.erl"},{line,795}]},{proc_lib,init_p_do_app
ly,3,[{file,"proc_lib.erl"},{line,247}]}]},[{gen_server,terminate,7,[{file,"gen_server.erl"}
,{line,800}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]}
ancestors: [os_mon_sup,<0.911.0>]
messages: []
links: [<0.912.0>]
dictionary: []
trap_exit: true
status: running
heap_size: 610
stack_size: 27
reductions: 368
neighbours:
2017-11-23 21:26:04 =SUPERVISOR REPORT====
Supervisor: {local,os_mon_sup}
Context: child_terminated
Reason:
{badarg,[{erlang,port_close,[#Port<0.2000>],[]},{disksup,terminate,2,[{file
,"disksup.erl"},{line,169}]},{gen_server,try_terminate,3,[{file,"gen_server.erl"},{line,629}
]},{gen_server,terminate,7,[{file,"gen_server.erl"},{line,795}]},{proc_lib,init_p_do_apply,3
,[{file,"proc_lib.erl"},{line,247}]}]}
Offender:
[{pid,<0.913.0>},{id,disksup},{mfargs,{disksup,start_link,[]}},{restart_typ
e,permanent},{shutdown,2000},{child_type,worker}]
--f403043c54a473c428055ead7af7
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I've got an Erlang/Elixir application that's being=
invoked via child_process in Node.js.=C2=A0 Outside of Node.js, it's f=
ine.=C2=A0 Inside, the node crashes on startup with a badarg from disksup -=
- this is because the application requires that os_mon be started.<div><br>=
</div><div>A trivial reproducer is the following:</div><div><br></div><div>=
var child_process =3D require('child_process');</div><div>child_pro=
cess.spawn(path_to_app_executable, ['foreground'],=C2=A0</div><div>=
=C2=A0{ stdio: ignore,=C2=A0</div><div>=C2=A0 =C2=A0detached: true });</div=
><div><br></div><div>Included is the crash:</div><div><pre style=3D"word-wr=
ap:break-word;white-space:pre-wrap">2017-11-23 21:26:04 =3DERROR REPORT=3D=
=3D=3D=3D
** Generic server disksup terminating
** Last message in was timeout
** When Server state =3D=3D [{data,[{"OS",{unix,linux}},{"Ti=
meout",1800000},{"Threshold",80},{"D
iskData",[]}]}]
** Reason for termination =3D=3D
** {badarg,[{erlang,port_close,[#Port<0.2000>],[]},{disksup,terminate=
,2,[{file,"disksup.erl"
},{line,169}]},{gen_server,try_terminate,3,[{file,"gen_server.erl"=
;},{line,629}]},{gen_server
,terminate,7,[{file,"gen_server.erl"},{line,795}]},{proc_lib,init=
_p_do_apply,3,[{file,"proc_
lib.erl"},{line,247}]}]}
2017-11-23 21:26:04 =3DCRASH REPORT=3D=3D=3D=3D
crasher:
initial call: disksup:init/1
pid: <0.913.0>
registered_name: disksup
exception exit: {{badarg,[{erlang,port_close,[#Port<0.2000>],[]},=
{disksup,terminate,2,[{
file,"disksup.erl"},{line,169}]},{gen_server,try_terminate,3,[{fi=
le,"gen_server.erl"},{line,
629}]},{gen_server,terminate,7,[{file,"gen_server.erl"},{line,795=
}]},{proc_lib,init_p_do_app
ly,3,[{file,"proc_lib.erl"},{line,247}]}]},[{gen_server,terminate=
,7,[{file,"gen_server.erl"}
,{line,800}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},=
{line,247}]}]}
ancestors: [os_mon_sup,<0.911.0>]
messages: []
links: [<0.912.0>]
dictionary: []
trap_exit: true
status: running
heap_size: 610
stack_size: 27
reductions: 368
neighbours:
2017-11-23 21:26:04 =3DSUPERVISOR REPORT=3D=3D=3D=3D
Supervisor: {local,os_mon_sup}
Context: child_terminated
Reason: {badarg,[{erlang,port_close,[#Port<0.2000>],[]},{dis=
ksup,terminate,2,[{file
,"disksup.erl"},{line,169}]},{gen_server,try_terminate,3,[{file,&=
quot;gen_server.erl"},{line,629}
]},{gen_server,terminate,7,[{file,"gen_server.erl"},{line,795}]},=
{proc_lib,init_p_do_apply,3
,[{file,"proc_lib.erl"},{line,247}]}]}
Offender: [{pid,<0.913.0>},{id,disksup},{mfargs,{disksup,start=
_link,[]}},{restart_typ
e,permanent},{shutdown,2000},{child_type,worker}]</pre></div></div>
--f403043c54a473c428055ead7af7--
--===============0584333143936214229==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline