summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-11-20 22:41:55 -0800
committerTakashi Kokubun <takashikkbn@gmail.com>2020-11-20 22:47:54 -0800
commited8e552d4d2c825a3f780ac8bd898eaaca7c21e7 (patch)
tree33555b13eed036e4652df35c4ec2c4d603c308c5
parent3f8c60cf09da72d1d538e39aee890f511b498fea (diff)
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.
-rw-r--r--mjit_worker.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/mjit_worker.c b/mjit_worker.c
index fe784fe..c8b761d 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;