Dynamic code reloading
Deryk Barker
dbarker@REDACTED
Tue Apr 20 05:37:22 CEST 2010
Please excuse me if this is a daft question...and I am sure there are
OTP functions to do all this for you, but I wanted to show my students
some features of "pure" erlang.
Specifically, I'd like to have a server that can call the latest version
of itself in response to a message.
Based on my reading of the "old" erlang book (the OOP, sorry out of
print, one), it seemed that having a receive pattern something like:
{dbase, Pid, reload} ->
reply (Pid, reloading),
dbase:loop (DataBase);
would work. (It's a *very* simple database server in a module called dbase).
Unfortunately, this doesn't cause the new BEAM file, compiled outside
the erlang shell, to be loaded.
OK, try compiling in the erlang shell (server is running under same
shell), but this takes down the server - silently. I know it's gone
because its registered name (dbserver) is no longer in the registered
name table.
Perhaps I need to use code:load_file/1?
But that tells me the module needs to be purged first.
code:soft_purge/1 (which, according to the documentation, leaves
existing processes running the module running) fails - with a not_purged
error - and code:purge/1 works fine, but takes down the server.
Can anyone tell me how I should be doing this and just how dim I am being?
thanks,
deryk
--
|Deryk Barker, Computer Science Dept. | Music does not have to be understood|
|Camosun College, Victoria, BC, Canada| It has to be listened to. |
|email: dbarker@REDACTED | |
|phone: +1 250 370 4452 | Hermann Scherchen. |
More information about the erlang-questions
mailing list