1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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.
This commit is contained in:
Takashi Kokubun 2020-11-20 22:41:55 -08:00
parent 3f8c60cf09
commit ed8e552d4d
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD

View file

@ -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;