Avoid duplicate proactive recompilation
This commit is contained in:
@@ -1039,20 +1039,21 @@ void compile_shared_unit(Request* context, SharedUnit* su)
|
||||
compiler_mark_source_generation(context);
|
||||
}
|
||||
|
||||
SharedUnit* compiler_get_shared_unit_internal(Request* context, String file_name, bool force_recompile)
|
||||
SharedUnit* compiler_get_shared_unit_internal(Request* context, String file_name, bool force_recompile, bool retry_current_failure = false)
|
||||
{
|
||||
file_name = compiler_normalize_unit_path(context, file_name);
|
||||
bool bypass_cached_result = force_recompile || retry_current_failure;
|
||||
|
||||
auto cached = compiler_reusable_cached_unit(context, file_name, force_recompile);
|
||||
auto cached = compiler_reusable_cached_unit(context, file_name, bypass_cached_result);
|
||||
if(cached)
|
||||
return(cached);
|
||||
|
||||
compiler_release_cached_unit_if_needed(context, file_name, force_recompile);
|
||||
compiler_release_cached_unit_if_needed(context, file_name, bypass_cached_result);
|
||||
|
||||
SharedUnit* su = new SharedUnit();
|
||||
setup_unit_paths(context, su, file_name);
|
||||
|
||||
bool can_serve_stale = !force_recompile && compiler_unit_can_serve_stale_artifact(context, file_name);
|
||||
bool can_serve_stale = !bypass_cached_result && compiler_unit_can_serve_stale_artifact(context, file_name);
|
||||
int fdlock = compiler_open_lock_file(su->wasm_name + ".lock", "shared-unit:" + file_name, can_serve_stale);
|
||||
if(fdlock == -2 && file_exists(su->wasm_name))
|
||||
{
|
||||
@@ -1076,7 +1077,7 @@ SharedUnit* compiler_get_shared_unit_internal(Request* context, String file_name
|
||||
return(su);
|
||||
}
|
||||
|
||||
cached = compiler_reusable_cached_unit(context, file_name, force_recompile);
|
||||
cached = compiler_reusable_cached_unit(context, file_name, bypass_cached_result);
|
||||
if(cached)
|
||||
{
|
||||
compiler_close_lock_file(fdlock);
|
||||
@@ -1084,7 +1085,7 @@ SharedUnit* compiler_get_shared_unit_internal(Request* context, String file_name
|
||||
return(cached);
|
||||
}
|
||||
|
||||
compiler_release_cached_unit_if_needed(context, file_name, force_recompile);
|
||||
compiler_release_cached_unit_if_needed(context, file_name, bypass_cached_result);
|
||||
|
||||
auto state = inspect_shared_unit_filesystem(context, su);
|
||||
auto compile_check = shared_unit_compile_check(state);
|
||||
@@ -1093,9 +1094,9 @@ SharedUnit* compiler_get_shared_unit_internal(Request* context, String file_name
|
||||
bool do_recompile = force_recompile || compile_check.needs_compile;
|
||||
if(do_recompile)
|
||||
{
|
||||
if(!force_recompile && retry_deferred)
|
||||
if(!force_recompile && !retry_current_failure && retry_deferred)
|
||||
compiler_restore_persisted_failure(su, state);
|
||||
else if(!force_recompile && !jit_enabled)
|
||||
else if(!force_recompile && !retry_current_failure && !jit_enabled)
|
||||
{
|
||||
compiler_restore_persisted_failure(su, state, "jit_compile_disabled");
|
||||
if(trim(su->compiler_messages) == "")
|
||||
|
||||
Reference in New Issue
Block a user