[erlang-questions] Issues with reltool vs. init:stop()

Frédéric Trottier-Hébert <>
Tue Jun 28 18:25:31 CEST 2011


For anyone interested in playing with the source, I've uploaded it to http://ferd.ca/release.zip

Just starting the release should be enough to get it going and printing some results. The init:stop/0 call takes place in erlcount-1.0/src/erlcount_dispatch.erl. The app itself is explained in details at http://learnyousomeerlang.com/the-count-of-applications 

I'm getting a bit lost trying to find causes and solutions for that issue. I haven't yet dug into reltool's code nor have I checked that the boot/rel scripts have similar instructions, but I guess this will be the next step if nobody's ever had that problem before me.

Cheers,
--
Fred Hébert
http://www.erlang-solutions.com



On 2011-06-28, at 07:56 AM, Frédéric Trottier-Hébert wrote:

> I'm having quite peculiar issues when it comes to shutting down the VM from within a release.
> 
> I'm writing a little demo application to play with reltools. The application is using files from LYSE's last chapters on applications, but I believe my problem to be independent from there. I've modified my code a bit so that when it's done running, 'init:stop()' is called from within one of the gen_servers I have. Whenever I do "application:start(ppool), application:start(erlcount)." and wait, the erlcount application will run, call init:stop(), and everything will shut down fine.
> 
> I then made a release (.rel file not included here) with systools:
> 
> systools:make_script("erlcount-1.0", [local]). 
> systools:make_tar("erlcount-1.0", [{erts,"/local/lib/erlang"}])
> 
> And ran it with
> 
> $ ./erts-5.8.4/bin/erl -boot ./releases/1.0.0/start
> 
> from the right directory, which worked well. Init:stop() managed to take the VM down.
> 
> Then I decided to switch to reltool. This is my current config file (not yet having all modules stripped down):
> 
> {sys, [
>  {lib_dirs, ["/home/ferd/code/learn-you-some-erlang/release/"]}, 
>  {rel, "erlcount", "1.0.0", [kernel, stdlib, {ppool, permanent}, {erlcount, permanent}]},
>  {boot_rel, "erlcount"}, 
>  {relocatable, true},  
>  {profile, standalone}, 
>  {app, ppool, [{vsn, "1.0.0"}, {app_file, all},  {debug_info, keep}]},   
>  {app, erlcount, [{vsn, "1.0.0"},  {incl_cond, include},  {app_file, strip}, {debug_info, strip}]} 
> ]}. 
> 
> I then run the following commands, without an error:
> 
> 1> {ok, Conf} = file:consult("erlcount-1.0.config"). 
> 2> {ok, Spec} = reltool:get_target_spec(Conf).
> 3> reltool:eval_target_spec(Spec, code:root_dir(), "./rel"). 
> 
> Then, when I call "./rel/bin/erl" from the shell, the application starts normally, does everything it needs to do, but init:stop() will hang forever and the VM will only stop if I start it with -shutdown_timeout SomeDelay that will kill everything.
> 
> The same problem remains if I make a more stripped-down reltools release by using incl_cond on the apps I want to only keep the core of what's necessary.
> 
> I've googled around a bit and have not found anything that might explain this behaviour. My application's code doesn't seem to be the culprit given it works normally from the shell, and also works normally with systools, but fails to quit with reltools. I've also tried calling './rel/bin/erl -run init stop' -- it seems that it kills part of the VM's apps (no output coming, or only partial output from the app), but will still fail to take the whole VM down. 
> 
> Anyone has an idea or has had similar problems? Pointers or idea of what to explore to resolve this? I've tried it both with R14B02 and R14B03 and it keeps the same behaviour there. Reltool seems to break init:stop for my release.
> 
> --
> Fred Hébert
> http://www.erlang-solutions.com
> 
> 
> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list