summaryrefslogtreecommitdiff
path: root/mjit_worker.c
diff options
context:
space:
mode:
Diffstat (limited to 'mjit_worker.c')
-rw-r--r--mjit_worker.c101
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;
}