[erlang-questions] How to upgrade running applications repeatedly
Matthias Lang
matthias@REDACTED
Fri Jun 8 10:54:58 CEST 2007
Bo writes:
> Hello All.
> I have tried without success to be able to update my running applications. The code below is a very simple example in which there is a loop, that will always call itself with ?MODULE:loop(L) which according to the documentation should always call the latest version of itself, but this is what happens:
>
> 1) I start the app with test1:start().
> 2) I compile it and send some message to it, everything works
> 3) I repeat step 2 and the program fails
Ok, so the problem turned out to be that old code was still running on
the second code load (which happened implicitly as part of the
compile).
Some suggestions:
- Take a look at code:soft_purge/1
- By default, use spawn_link() or proc_lib:spawn_link() and not
plain spawn. Most of the time, you don't want processes to die
silently. (Ulf Wiger already suggested this)
- Don't be "too clever" with funs. There are a few gotchas which
affect code loading. You can read a bit more here, under "Do
funs behave during a code change?"
http://www.erlang.org/faq/x1138.html#AEN1201
Experimenting with the basics, e.g. writing a 'server' process from
scratch, is a great way to learn. And then you can forgive gen_server
for not being so pretty, because it gets the fiddly details right so
that you have to go out of your way to screw up code loading.
Matthias
More information about the erlang-questions
mailing list