diff options
Diffstat (limited to 'lib/kernel/src/code_server.erl')
| -rw-r--r-- | lib/kernel/src/code_server.erl | 19 | 
1 files changed, 13 insertions, 6 deletions
| diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl index 4a1fc7df34..e3d22e7999 100644 --- a/lib/kernel/src/code_server.erl +++ b/lib/kernel/src/code_server.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %% -%% Copyright Ericsson AB 1998-2010. All Rights Reserved. +%% Copyright Ericsson AB 1998-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 @@ -1379,8 +1379,12 @@ absname_vr([[X, $:]|Name], _, _AbsBase) ->  %%  Kill all processes running code from *old* Module, and then purge the  %%  module. Return true if any processes killed, else false. -do_purge(Mod) -> -    do_purge(processes(), to_atom(Mod), false). +do_purge(Mod0) -> +    Mod = to_atom(Mod0), +    case erlang:check_old_code(Mod) of +	false -> false; +	true -> do_purge(processes(), Mod, false) +    end.  do_purge([P|Ps], Mod, Purged) ->      case erlang:check_process_code(P, Mod) of @@ -1399,16 +1403,19 @@ do_purge([], Mod, Purged) ->      Purged.  %% do_soft_purge(Module) -%% Purge old code only if no procs remain that run old code +%% Purge old code only if no procs remain that run old code.  %% Return true in that case, false if procs remain (in this  %% case old code is not purged)  do_soft_purge(Mod) -> -    catch do_soft_purge(processes(), Mod). +    case erlang:check_old_code(Mod) of +	false -> true; +	true -> do_soft_purge(processes(), Mod) +    end.  do_soft_purge([P|Ps], Mod) ->      case erlang:check_process_code(P, Mod) of -	true -> throw(false); +	true -> false;  	false -> do_soft_purge(Ps, Mod)      end;  do_soft_purge([], Mod) -> | 
