From ed8e552d4d2c825a3f780ac8bd898eaaca7c21e7 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Fri, 20 Nov 2020 22:41:55 -0800 Subject: Shrink the blocking region for compile_compact_jit_code Isn't setting `in_compact = true` enough to avoid a race condition between JIT compaction and unload_units? Now I think it is. This change will make it easier to spend more time on compile_compact_jit_code. For now it seems to take only 0.0723ms though. --- mjit_worker.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'mjit_worker.c') diff --git a/mjit_worker.c b/mjit_worker.c index fe784fec2c..c8b761d141 100644 --- a/mjit_worker.c +++ b/mjit_worker.c @@ -934,7 +934,6 @@ compact_all_jit_code(void) { # if USE_HEADER_TRANSFORMATION struct rb_mjit_unit *unit, *cur = 0; - double start_time, end_time; static const char c_ext[] = ".c"; static const char so_ext[] = DLEXT; char c_file[MAXPATHLEN], so_file[MAXPATHLEN]; @@ -947,17 +946,17 @@ compact_all_jit_code(void) sprint_uniq_filename(c_file, (int)sizeof(c_file), unit->id, MJIT_TMP_PREFIX, c_ext); CRITICAL_SECTION_START(3, "in compact_all_jit_code to guard .c files from unload_units"); - bool success = compile_compact_jit_code(c_file); in_compact = true; CRITICAL_SECTION_FINISH(3, "in compact_all_jit_code to guard .c files from unload_units"); - start_time = real_ms_time(); + bool success = compile_compact_jit_code(c_file); + double start_time = real_ms_time(); if (success) { success = compile_c_to_so(c_file, so_file); if (!mjit_opts.save_temps) remove_file(c_file); } - end_time = real_ms_time(); + double end_time = real_ms_time(); CRITICAL_SECTION_START(3, "in compact_all_jit_code to release .c files"); in_compact = false; -- cgit v1.2.3