diff options
author | Sverker Eriksson <[email protected]> | 2015-12-15 20:32:39 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2016-01-13 19:59:53 +0100 |
commit | fa44f865c3fc6253cf4691cf94839c303a3ee40f (patch) | |
tree | 47ec77902253825bceab86035a6c960b801188e2 /erts/preloaded/src/erts_internal.erl | |
parent | c612edf4ada1f00b2bdb8404103e0d8307dc8f4c (diff) | |
download | otp-fa44f865c3fc6253cf4691cf94839c303a3ee40f.tar.gz otp-fa44f865c3fc6253cf4691cf94839c303a3ee40f.tar.bz2 otp-fa44f865c3fc6253cf4691cf94839c303a3ee40f.zip |
erts: Make erlang:purge_module/1 safe
Problem: erlang:purge_module/1 is not safe in the sense
that very bad things may happen if the code to be purged
is still referred to by live processes.
Introduce erts_internal:purge_module which is the same as the old
erlang:purge_module BIF (except it returns false if no such old module).
Implement erlang:purge_module in Erlang and let it invoke
erts_code_purger for safe purging where all clogging processes
first are killed.
Diffstat (limited to 'erts/preloaded/src/erts_internal.erl')
-rw-r--r-- | erts/preloaded/src/erts_internal.erl | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl index 426749264f..6e649e8395 100644 --- a/erts/preloaded/src/erts_internal.erl +++ b/erts/preloaded/src/erts_internal.erl @@ -38,6 +38,7 @@ -export([request_system_task/3]). -export([check_process_code/2]). +-export([purge_module/1]). -export([flush_monitor_messages/3]). @@ -204,6 +205,11 @@ request_system_task(_Pid, _Prio, _Request) -> check_process_code(_Module, _OptionList) -> erlang:nif_error(undefined). +-spec purge_module(Module) -> boolean() when + Module :: module(). +purge_module(_Module) -> + erlang:nif_error(undefined). + %% term compare where integer() < float() = true -spec cmp_term(A,B) -> Result when |