diff options
author | k0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-07-24 14:36:10 +0000 |
---|---|---|
committer | k0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-07-24 14:36:10 +0000 |
commit | 83c9263b85d8ebd8db446f9a339a0231a0f0d3d5 (patch) | |
tree | 6d3e3a89ed243a645effeb8a3cd4d817e11cae45 | |
parent | e8df28d9aedbf60dfae8c7615da3e9a130a2ee44 (diff) |
mjit.c: prevent GC on MJIT worker
mjit_compile.c: ditto.
REALLOC_N, ALLOC_N and xmalloc trigger GC but it's not expected.
Other allocation calls in mjit.c are executed on Ruby's main thread and
thus fine.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64033 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | mjit.c | 10 | ||||
-rw-r--r-- | mjit_compile.c | 4 |
2 files changed, 7 insertions, 7 deletions
@@ -334,7 +334,7 @@ form_args(int num, ...) for (i = len = 0; i < num; i++) { args = va_arg(argp, char **); n = args_len(args); - REALLOC_N(res, char *, len + n + 1); + res = (char **)realloc(res, sizeof(char *) * (len + n + 1)); MEMCPY(res + len, args, char *, n + 1); len += n; } @@ -717,7 +717,7 @@ make_pch(void) } exit_code = exec_process(cc_path, args); - xfree(args); + free(args); #endif CRITICAL_SECTION_START(3, "in make_pch"); @@ -766,7 +766,7 @@ compile_c_to_so(const char *c_file, const char *so_file) #ifdef _MSC_VER solen = strlen(so_file); - files[0] = p = xmalloc(rb_strlen_lit("-Fe") + solen + 1); + files[0] = p = (char *)malloc(sizeof(char) * (rb_strlen_lit("-Fe") + solen + 1)); p = append_lit(p, "-Fe"); p = append_str2(p, so_file, solen); *p = '\0'; @@ -784,9 +784,9 @@ compile_c_to_so(const char *c_file, const char *so_file) return FALSE; exit_code = exec_process(cc_path, args); - xfree(args); + free(args); #ifdef _MSC_VER - xfree((char *)files[0]); + free((char *)files[0]); #endif if (exit_code != 0) diff --git a/mjit_compile.c b/mjit_compile.c index 5eafd72329..7b8e2a7312 100644 --- a/mjit_compile.c +++ b/mjit_compile.c @@ -192,7 +192,7 @@ mjit_compile(FILE *f, const struct rb_iseq_constant_body *body, const char *func struct compile_status status; status.success = TRUE; status.local_stack_p = !body->catch_except_p; - status.stack_size_for_pos = ALLOC_N(int, body->iseq_size); + status.stack_size_for_pos = (int *)malloc(sizeof(int) * body->iseq_size); memset(status.stack_size_for_pos, NOT_COMPILED_STACK_SIZE, sizeof(int) * body->iseq_size); /* For performance, we verify stack size only on compilation time (mjit_compile.inc.erb) without --jit-debug */ @@ -232,6 +232,6 @@ mjit_compile(FILE *f, const struct rb_iseq_constant_body *body, const char *func compile_cancel_handler(f, body, &status); fprintf(f, "\n} /* end of %s */\n", funcname); - xfree(status.stack_size_for_pos); + free(status.stack_size_for_pos); return status.success; } |