diff options
Diffstat (limited to 'mjit_worker.c')
-rw-r--r-- | mjit_worker.c | 101 |
1 files changed, 49 insertions, 52 deletions
diff --git a/mjit_worker.c b/mjit_worker.c index eab4654f9c..10a101e8c4 100644 --- a/mjit_worker.c +++ b/mjit_worker.c @@ -132,10 +132,10 @@ struct rb_mjit_unit { #ifndef _MSC_VER /* This value is always set for `compact_all_jit_code`. Also used for lazy deletion. */ char *o_file; - /* TRUE if it's inherited from parent Ruby process and lazy deletion should be skipped. + /* true if it's inherited from parent Ruby process and lazy deletion should be skipped. `o_file = NULL` can't be used to skip lazy deletion because `o_file` could be used by child for `compact_all_jit_code`. */ - int o_file_inherited_p; + bool o_file_inherited_p; #endif #if defined(_WIN32) /* DLL cannot be removed while loaded on Windows. If this is set, it'll be lazily deleted. */ @@ -171,11 +171,11 @@ extern rb_pid_t ruby_waitpid_locked(rb_vm_t *, rb_pid_t, int *status, int option freed. */ struct mjit_options mjit_opts; -/* TRUE if MJIT is enabled. */ -int mjit_enabled = FALSE; -/* TRUE if JIT-ed code should be called. When `ruby_vm_event_enabled_global_flags & ISEQ_TRACE_EVENTS` - and `mjit_call_p == FALSE`, any JIT-ed code execution is cancelled as soon as possible. */ -int mjit_call_p = FALSE; +// true if MJIT is enabled. +bool mjit_enabled = false; +// true if JIT-ed code should be called. When `ruby_vm_event_enabled_global_flags & ISEQ_TRACE_EVENTS` +// and `mjit_call_p == false`, any JIT-ed code execution is cancelled as soon as possible. +bool mjit_call_p = false; /* Priority queue of iseqs waiting for JIT compilation. This variable is a pointer to head unit of the queue. */ @@ -198,14 +198,14 @@ static rb_nativethread_cond_t mjit_client_wakeup; static rb_nativethread_cond_t mjit_worker_wakeup; /* A thread conditional to wake up workers if at the end of GC. */ static rb_nativethread_cond_t mjit_gc_wakeup; -/* True when GC is working. */ -static int in_gc; -/* True when JIT is working. */ -static int in_jit; -/* Set to TRUE to stop worker. */ -static int stop_worker_p; -/* Set to TRUE if worker is stopped. */ -static int worker_stopped; +// True when GC is working. +static bool in_gc; +// True when JIT is working. +static bool in_jit; +// Set to TRUE to stop worker. +static bool stop_worker_p; +// Set to TRUE if worker is stopped. +static bool worker_stopped; /* Path of "/tmp", which can be changed to $TMP in MinGW. */ static char *tmp_dir; @@ -363,7 +363,7 @@ clean_object_files(struct rb_mjit_unit *unit) char *so_file = unit->so_file; unit->so_file = NULL; - /* unit->so_file is set only when mjit_opts.save_temps is FALSE. */ + // unit->so_file is set only when mjit_opts.save_temps is false. remove_file(so_file); free(so_file); } @@ -444,14 +444,12 @@ real_ms_time(void) } #endif -/* Return TRUE if class_serial is not obsoleted. This is used by mjit_compile.c. */ -int +// Return true if class_serial is not obsoleted. This is used by mjit_compile.c. +bool mjit_valid_class_serial_p(rb_serial_t class_serial) { - int found_p; - CRITICAL_SECTION_START(3, "in valid_class_serial_p"); - found_p = rb_hash_stlike_lookup(valid_class_serials, LONG2FIX(class_serial), NULL); + bool found_p = rb_hash_stlike_lookup(valid_class_serials, LONG2FIX(class_serial), NULL); CRITICAL_SECTION_FINISH(3, "in valid_class_serial_p"); return found_p; } @@ -652,8 +650,8 @@ remove_so_file(const char *so_file, struct rb_mjit_unit *unit) #define append_lit(p, str) append_str2(p, str, rb_strlen_lit(str)) #ifdef _MSC_VER -/* Compile C file to so. It returns 1 if it succeeds. (mswin) */ -static int +// Compile C file to so. It returns true if it succeeds. (mswin) +static bool compile_c_to_so(const char *c_file, const char *so_file) { int exit_code; @@ -703,7 +701,7 @@ compile_c_to_so(const char *c_file, const char *so_file) args = form_args(5, CC_LDSHARED_ARGS, CC_CODEFLAG_ARGS, files, CC_LIBS, CC_DLDFLAGS_ARGS); if (args == NULL) - return FALSE; + return false; exit_code = exec_process(cc_path, args); free(args); @@ -770,8 +768,8 @@ make_pch(void) CRITICAL_SECTION_FINISH(3, "in make_pch"); } -/* Compile .c file to .o file. It returns 1 if it succeeds. (non-mswin) */ -static int +// Compile .c file to .o file. It returns true if it succeeds. (non-mswin) +static bool compile_c_to_o(const char *c_file, const char *o_file) { int exit_code; @@ -791,7 +789,7 @@ compile_c_to_o(const char *c_file, const char *o_file) # endif args = form_args(5, cc_common_args, CC_CODEFLAG_ARGS, files, CC_LIBS, CC_DLDFLAGS_ARGS); if (args == NULL) - return FALSE; + return false; exit_code = exec_process(cc_path, args); free(args); @@ -801,8 +799,8 @@ compile_c_to_o(const char *c_file, const char *o_file) return exit_code == 0; } -/* Link .o files to .so file. It returns 1 if it succeeds. (non-mswin) */ -static int +// Link .o files to .so file. It returns true if it succeeds. (non-mswin) +static bool link_o_to_so(const char **o_files, const char *so_file) { int exit_code; @@ -819,7 +817,7 @@ link_o_to_so(const char **o_files, const char *so_file) args = form_args(6, CC_LDSHARED_ARGS, CC_CODEFLAG_ARGS, options, o_files, CC_LIBS, CC_DLDFLAGS_ARGS); if (args == NULL) - return FALSE; + return false; exit_code = exec_process(cc_path, args); free(args); @@ -840,7 +838,7 @@ compact_all_jit_code(void) static const char so_ext[] = DLEXT; char so_file[MAXPATHLEN]; const char **o_files; - int i = 0, success; + int i = 0; /* Abnormal use case of rb_mjit_unit that doesn't have ISeq */ unit = calloc(1, sizeof(struct rb_mjit_unit)); /* To prevent GC, don't use ZALLOC */ @@ -858,7 +856,7 @@ compact_all_jit_code(void) } start_time = real_ms_time(); - success = link_o_to_so(o_files, so_file); + bool success = link_o_to_so(o_files, so_file); end_time = real_ms_time(); /* TODO: Shrink this big critical section. For now, this is needed to prevent failure by missing .o files. @@ -983,7 +981,6 @@ static mjit_func_t convert_unit_to_func(struct rb_mjit_unit *unit, struct rb_call_cache *cc_entries, union iseq_inline_storage_entry *is_entries) { char c_file_buff[MAXPATHLEN], *c_file = c_file_buff, *so_file, funcname[35]; /* TODO: reconsider `35` */ - int success; int fd; FILE *f; void *func; @@ -1044,10 +1041,10 @@ convert_unit_to_func(struct rb_mjit_unit *unit, struct rb_call_cache *cc_entries if (!mjit_opts.save_temps) remove_file(c_file); free_unit(unit); - in_jit = FALSE; /* just being explicit for return */ + in_jit = false; // just being explicit for return } else { - in_jit = TRUE; + in_jit = true; } CRITICAL_SECTION_FINISH(3, "before mjit_compile to wait GC finish"); if (!in_jit) { @@ -1062,11 +1059,11 @@ convert_unit_to_func(struct rb_mjit_unit *unit, struct rb_call_cache *cc_entries verbose(2, "start compilation: %s@%s:%d -> %s", label, path, lineno, c_file); fprintf(f, "/* %s@%s:%d */\n\n", label, path, lineno); } - success = mjit_compile(f, unit->iseq->body, funcname, cc_entries, is_entries); + bool success = mjit_compile(f, unit->iseq->body, funcname, cc_entries, is_entries); /* release blocking mjit_gc_start_hook */ CRITICAL_SECTION_START(3, "after mjit_compile to wakeup client for GC"); - in_jit = FALSE; + in_jit = false; verbose(3, "Sending wakeup signal to client in a mjit-worker for GC"); rb_native_cond_signal(&mjit_client_wakeup); CRITICAL_SECTION_FINISH(3, "in worker to wakeup client for GC"); @@ -1084,7 +1081,7 @@ convert_unit_to_func(struct rb_mjit_unit *unit, struct rb_call_cache *cc_entries success = compile_c_to_so(c_file, so_file); #else /* splitting .c -> .o step and .o -> .so step, to cache .o files in the future */ - if ((success = compile_c_to_o(c_file, o_file)) != 0) { + if ((success = compile_c_to_o(c_file, o_file)) != false) { const char *o_files[2] = { NULL, NULL }; o_files[0] = o_file; success = link_o_to_so(o_files, so_file); @@ -1124,7 +1121,7 @@ typedef struct { struct rb_mjit_unit *unit; struct rb_call_cache *cc_entries; union iseq_inline_storage_entry *is_entries; - int finish_p; + bool finish_p; } mjit_copy_job_t; /* Singleton MJIT copy job. This is made global since it needs to be durable even when MJIT worker thread is stopped. @@ -1138,12 +1135,12 @@ int rb_workqueue_register(unsigned flags, rb_postponed_job_func_t , void *); /* We're lazily copying cache values from main thread because these cache values could be different between ones on enqueue timing and ones on dequeue timing. - Return TRUE if copy succeeds. */ -static int + Return true if copy succeeds. */ +static bool copy_cache_from_main_thread(mjit_copy_job_t *job) { CRITICAL_SECTION_START(3, "in copy_cache_from_main_thread"); - job->finish_p = FALSE; /* allow dispatching this job in mjit_copy_job_handler */ + job->finish_p = false; // allow dispatching this job in mjit_copy_job_handler CRITICAL_SECTION_FINISH(3, "in copy_cache_from_main_thread"); if (UNLIKELY(mjit_opts.wait)) { @@ -1152,7 +1149,7 @@ copy_cache_from_main_thread(mjit_copy_job_t *job) } if (!rb_workqueue_register(0, mjit_copy_job_handler, (void *)job)) - return FALSE; + return false; CRITICAL_SECTION_START(3, "in MJIT copy job wait"); /* checking `stop_worker_p` too because `RUBY_VM_CHECK_INTS(ec)` may not lush mjit_copy_job_handler when EC_EXEC_TAG() is not TAG_NONE, and then @@ -1179,9 +1176,9 @@ mjit_worker(void) } #endif if (pch_status == PCH_FAILED) { - mjit_enabled = FALSE; + mjit_enabled = false; CRITICAL_SECTION_START(3, "in worker to update worker_stopped"); - worker_stopped = TRUE; + worker_stopped = true; verbose(3, "Sending wakeup signal to client in a mjit-worker"); rb_native_cond_signal(&mjit_client_wakeup); CRITICAL_SECTION_FINISH(3, "in worker to update worker_stopped"); @@ -1199,7 +1196,7 @@ mjit_worker(void) verbose(3, "Getting wakeup from client"); } unit = get_from_list(&unit_queue); - job->finish_p = TRUE; /* disable dispatching this job in mjit_copy_job_handler while it's being modified */ + job->finish_p = true; // disable dispatching this job in mjit_copy_job_handler while it's being modified CRITICAL_SECTION_FINISH(3, "in worker dequeue"); if (unit) { @@ -1216,7 +1213,7 @@ mjit_worker(void) /* Copy ISeq's inline caches values to avoid race condition. */ if (job->cc_entries != NULL || job->is_entries != NULL) { - if (copy_cache_from_main_thread(job) == FALSE) { + if (copy_cache_from_main_thread(job) == false) { continue; /* retry postponed_job failure, or stop worker */ } } @@ -1245,10 +1242,10 @@ mjit_worker(void) } } - /* Disable dispatching this job in mjit_copy_job_handler while memory allocated by alloca - could be expired after finishing this function. */ - job->finish_p = TRUE; + // Disable dispatching this job in mjit_copy_job_handler while memory allocated by alloca + // could be expired after finishing this function. + job->finish_p = true; - /* To keep mutex unlocked when it is destroyed by mjit_finish, don't wrap CRITICAL_SECTION here. */ - worker_stopped = TRUE; + // To keep mutex unlocked when it is destroyed by mjit_finish, don't wrap CRITICAL_SECTION here. + worker_stopped = true; } |