aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2014-02-26 14:36:55 +0100
committerSiri Hansen <[email protected]>2014-03-25 11:34:35 +0100
commitf6bb3dc325e686375b1dee283bd91c3068b682a1 (patch)
treedb32da53a73fbf4a3222aa1493efdb82c8b16898
parentc5dc6babf962b22aaffd04bd8c1fff761973f0c0 (diff)
downloadotp-f6bb3dc325e686375b1dee283bd91c3068b682a1.tar.gz
otp-f6bb3dc325e686375b1dee283bd91c3068b682a1.tar.bz2
otp-f6bb3dc325e686375b1dee283bd91c3068b682a1.zip
Change spawn/1 + monitor/2 to spawn_monitor/1 to avoid deadlock
crashdump_viewer:progress_pmap did sometimes hang since is spawned a process, then monitored it and waited for a specific DOWN message. When the process' work was very fast, it would exit before the call to monitor and the DOWN message would contain reason 'noproc' instead of the expected {pmap_done,Result}. By doing spawn_monitor/1 instead, the monitor is always set before the process exits so the deadlock is avoided.
-rw-r--r--lib/observer/src/crashdump_viewer.erl6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/observer/src/crashdump_viewer.erl b/lib/observer/src/crashdump_viewer.erl
index a17efbccb0..0467e808e3 100644
--- a/lib/observer/src/crashdump_viewer.erl
+++ b/lib/observer/src/crashdump_viewer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2014. 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
@@ -2559,11 +2559,11 @@ progress_pmap(Report,File,Fun,List) ->
{L1,L2} = if length(L)>=NPerProc -> lists:split(NPerProc,L);
true -> {L,[]} % last chunk
end,
- P = spawn(
+ {P,_Ref} =
+ spawn_monitor(
fun() ->
progress_map(Collector,ReportInterval,File,Fun,L1)
end),
- erlang:monitor(process,P),
{L2,[P|Ps]}
end,
{List,[]},