diff options
author | Siri Hansen <[email protected]> | 2014-02-26 14:36:55 +0100 |
---|---|---|
committer | Siri Hansen <[email protected]> | 2014-03-25 11:34:35 +0100 |
commit | f6bb3dc325e686375b1dee283bd91c3068b682a1 (patch) | |
tree | db32da53a73fbf4a3222aa1493efdb82c8b16898 /lib/observer | |
parent | c5dc6babf962b22aaffd04bd8c1fff761973f0c0 (diff) | |
download | otp-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.
Diffstat (limited to 'lib/observer')
-rw-r--r-- | lib/observer/src/crashdump_viewer.erl | 6 |
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,[]}, |