From 61c6a52561fd2be45adf3fbf7c65789a161aad38 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Fri, 1 Apr 2011 20:00:20 +0200
Subject: Fix code:is_module_native segv on deleted module

---
 erts/emulator/beam/beam_bif_load.c | 4 ++--
 erts/emulator/test/code_SUITE.erl  | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

(limited to 'erts/emulator')

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) ->
-- 
cgit v1.2.3