From 97a3aa3d0b02e83403f948e1ecbd01e37796379b Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Fri, 22 Jan 2016 07:51:43 -0800 Subject: [PATCH] Fix treatment of recursion and double file descriptor close in on-demand. Reviewed By: jeremydubreil Differential Revision: D2850579 fb-gh-sync-id: 7cb2476 --- infer/src/backend/fork.ml | 11 ++++++++--- infer/src/backend/ondemand.ml | 1 - infer/src/backend/printer.ml | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/infer/src/backend/fork.ml b/infer/src/backend/fork.ml index 5df58b738..ab113090d 100644 --- a/infer/src/backend/fork.ml +++ b/infer/src/backend/fork.ml @@ -40,14 +40,19 @@ let proc_is_up_to_date gr pname = | None -> false | Some summary -> let filter dependent_proc = - Specs.get_timestamp summary = - Procname.Map.find dependent_proc summary.Specs.dependency_map in + try + Specs.get_timestamp summary = + Procname.Map.find dependent_proc summary.Specs.dependency_map + with Not_found -> (* can happen in on-demand *) + true in Procname.Set.for_all filter (Cg.get_defined_children gr pname) (** Return the list of procedures which should perform a phase transition from [FOOTPRINT] to [RE_EXECUTION] *) let should_perform_transition gr proc_name : Procname.t list = - let recursive_dependents = Cg.get_recursive_dependents gr proc_name in + let recursive_dependents = + if !Config.ondemand_enabled then Procname.Set.empty + else Cg.get_recursive_dependents gr proc_name in let recursive_dependents_plus_self = Procname.Set.add proc_name recursive_dependents in let should_transition = Specs.get_phase proc_name == Specs.FOOTPRINT && diff --git a/infer/src/backend/ondemand.ml b/infer/src/backend/ondemand.ml index e062beaca..f98973501 100644 --- a/infer/src/backend/ondemand.ml +++ b/infer/src/backend/ondemand.ml @@ -146,7 +146,6 @@ let do_analysis curr_pdesc proc_name = match !callbacks_ref with | Some callbacks when procedure_should_be_analyzed curr_pdesc proc_name -> - begin match callbacks.get_proc_desc proc_name with | Some proc_desc -> diff --git a/infer/src/backend/printer.ml b/infer/src/backend/printer.ml index 8ca494405..b69acac5f 100644 --- a/infer/src/backend/printer.ml +++ b/infer/src/backend/printer.ml @@ -92,7 +92,8 @@ end = struct let finish_node nodeid = let fname = id_to_fname nodeid in let fd = Hashtbl.find log_files (fname, !DB.current_source) in - Unix.close fd; + if not !Config.ondemand_enabled (* TODO: close all file descriptors at the end in on-demand *) + then Unix.close fd; html_formatter := F.std_formatter end (* =============== END of module Log_nodes =============== *)