aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2011-04-01 20:00:20 +0200
committerSverker Eriksson <[email protected]>2011-05-11 16:16:09 +0200
commit61c6a52561fd2be45adf3fbf7c65789a161aad38 (patch)
tree6ac4642b2324c9821f2541bcae89142d595b23a5
parent39520f55033d73f9754312f8ba13ea3e36403114 (diff)
downloadotp-61c6a52561fd2be45adf3fbf7c65789a161aad38.tar.gz
otp-61c6a52561fd2be45adf3fbf7c65789a161aad38.tar.bz2
otp-61c6a52561fd2be45adf3fbf7c65789a161aad38.zip
Fix code:is_module_native segv on deleted module
-rw-r--r--erts/emulator/beam/beam_bif_load.c4
-rw-r--r--erts/emulator/test/code_SUITE.erl2
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) ->