diff options
author | Hans Bolinder <[email protected]> | 2017-05-02 13:38:08 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2017-05-02 13:38:08 +0200 |
commit | 1b9d9234e096fbbccdf12081e27be14b14297876 (patch) | |
tree | d9760beffa87cfa5b26067bff81b8a94f15e2cf2 /lib/dialyzer/src/dialyzer_analysis_callgraph.erl | |
parent | 73acfede7099c6d04de82b73bff2f78abfd89ac6 (diff) | |
parent | 37decbb64953cd65bde2f7003ef5057dc0615ff1 (diff) | |
download | otp-1b9d9234e096fbbccdf12081e27be14b14297876.tar.gz otp-1b9d9234e096fbbccdf12081e27be14b14297876.tar.bz2 otp-1b9d9234e096fbbccdf12081e27be14b14297876.zip |
Merge branch 'maint'
* maint:
Updated OTP version
Prepare release
inets: Add missing release note
dialyzer: Fix a bug regarding unknown types
erl_mseg.c: don't use invalid indices in - > cache_powered_node[]
Fix release note for OTP-14290
Conflicts:
OTP_VERSION
erts/emulator/sys/common/erl_mseg.c
erts/vsn.mk
lib/dialyzer/src/dialyzer_analysis_callgraph.erl
Diffstat (limited to 'lib/dialyzer/src/dialyzer_analysis_callgraph.erl')
-rw-r--r-- | lib/dialyzer/src/dialyzer_analysis_callgraph.erl | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl index 051b700231..29aa25b98e 100644 --- a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl +++ b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl @@ -149,7 +149,7 @@ analysis_start(Parent, Analysis, LegalWarnings) -> dialyzer_codeserver:finalize_exported_types(MergedExpTypes, TmpCServer1), erlang:garbage_collect(), % reduce heap size ?timing(State#analysis_state.timing_server, "remote", - contracts_and_records(TmpCServer2)) + contracts_and_records(TmpCServer2, Parent)) catch throw:{error, _ErrorMsg} = Error -> exit(Error) end, @@ -173,15 +173,14 @@ analysis_start(Parent, Analysis, LegalWarnings) -> codeserver = Codeserver0} = State2, {Codeserver, MiniPlt3} = move_data(Codeserver0, MiniPlt2), dialyzer_callgraph:dispose_race_server(NewCallgraph), - rcv_and_send_ext_types(Parent), %% Since the PLT is never used, a dummy is sent: DummyPlt = dialyzer_plt:new(), send_codeserver_plt(Parent, Codeserver, DummyPlt), MiniPlt4 = dialyzer_plt:delete_list(MiniPlt3, NonExportsList), send_analysis_done(Parent, MiniPlt4, DocPlt). -contracts_and_records(CodeServer) -> - Fun = contrs_and_recs(CodeServer), +contracts_and_records(CodeServer, Parent) -> + Fun = contrs_and_recs(CodeServer, Parent), {Pid, Ref} = erlang:spawn_monitor(Fun), dialyzer_codeserver:give_away(CodeServer, Pid), Pid ! {self(), go}, @@ -189,16 +188,17 @@ contracts_and_records(CodeServer) -> Return end. --spec contrs_and_recs(dialyzer_codeserver:codeserver()) -> +-spec contrs_and_recs(dialyzer_codeserver:codeserver(), pid()) -> fun(() -> no_return()). -contrs_and_recs(TmpCServer2) -> +contrs_and_recs(TmpCServer2, Parent) -> fun() -> - Parent = receive {Pid, go} -> Pid end, + Caller = receive {Pid, go} -> Pid end, TmpCServer3 = dialyzer_utils:process_record_remote_types(TmpCServer2), TmpServer4 = dialyzer_contracts:process_contract_remote_types(TmpCServer3), - dialyzer_codeserver:give_away(TmpServer4, Parent), + dialyzer_codeserver:give_away(TmpServer4, Caller), + rcv_and_send_ext_types(Caller, Parent), exit(TmpServer4) end. @@ -525,13 +525,13 @@ default_includes(Dir) -> %% Handle Messages %%------------------------------------------------------------------- -rcv_and_send_ext_types(Parent) -> +rcv_and_send_ext_types(SendTo, Parent) -> Self = self(), Self ! {Self, done}, case rcv_ext_types(Self, []) of [] -> ok; ExtTypes -> - Parent ! {Self, ext_types, ExtTypes}, + Parent ! {SendTo, ext_types, ExtTypes}, ok end. |