diff options
author | Sverker Eriksson <[email protected]> | 2011-04-01 20:00:20 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2011-05-11 16:16:09 +0200 |
commit | 61c6a52561fd2be45adf3fbf7c65789a161aad38 (patch) | |
tree | 6ac4642b2324c9821f2541bcae89142d595b23a5 /erts | |
parent | 39520f55033d73f9754312f8ba13ea3e36403114 (diff) | |
download | otp-61c6a52561fd2be45adf3fbf7c65789a161aad38.tar.gz otp-61c6a52561fd2be45adf3fbf7c65789a161aad38.tar.bz2 otp-61c6a52561fd2be45adf3fbf7c65789a161aad38.zip |
Fix code:is_module_native segv on deleted module
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/beam_bif_load.c | 4 | ||||
-rw-r--r-- | erts/emulator/test/code_SUITE.erl | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c index 1ca405961f..5132cd7c8e 100644 --- a/erts/emulator/beam/beam_bif_load.c +++ b/erts/emulator/beam/beam_bif_load.c @@ -1,7 +1,7 @@ /* * %CopyrightBegin% * - * Copyright Ericsson AB 1999-2010. All Rights Reserved. + * Copyright Ericsson AB 1999-2011. All Rights Reserved. * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in @@ -142,7 +142,7 @@ BIF_RETTYPE code_is_module_native_1(BIF_ALIST_1) if ((modp = erts_get_module(BIF_ARG_1)) == NULL) { return am_undefined; } - return (is_native(modp->code) || + return ((modp->code && is_native(modp->code)) || (modp->old_code != 0 && is_native(modp->old_code))) ? am_true : am_false; } diff --git a/erts/emulator/test/code_SUITE.erl b/erts/emulator/test/code_SUITE.erl index c1a048be75..a062cea117 100644 --- a/erts/emulator/test/code_SUITE.erl +++ b/erts/emulator/test/code_SUITE.erl @@ -498,7 +498,9 @@ do_false_dependency(Init, Code) -> ?line unlink(Pid), exit(Pid, kill), ?line true = erlang:purge_module(cpbugx), ?line true = erlang:delete_module(cpbugx), + ?line code:is_module_native(cpbugx), % test is_module_native on deleted code ?line true = erlang:purge_module(cpbugx), + ?line code:is_module_native(cpbugx), % test is_module_native on purged code ok. false_dependency_loop(Parent, Init, SendInitAck) -> |