summaryrefslogtreecommitdiff
path: root/mjit.c
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-04 15:08:56 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-04 15:08:56 +0000
commitdf4a126d65e4690e9301392974fcc9adf7d4c474 (patch)
treeb7e28720d8dcdc42a4c4a0b607e29401d3e6aa62 /mjit.c
parent0f24cdec9ed4a2023b682e7cd5492b1602100b09 (diff)
Revert r63758 and related commits
The change is unstable on Windows. Please re-commit it when it correctly supports Windows. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'mjit.c')
-rw-r--r--mjit.c51
1 files changed, 12 insertions, 39 deletions
diff --git a/mjit.c b/mjit.c
index 87d5d09f48..07e9328aff 100644
--- a/mjit.c
+++ b/mjit.c
@@ -80,7 +80,6 @@
#include "constant.h"
#include "id_table.h"
#include "ruby_assert.h"
-#include "ruby/thread.h"
#include "ruby/util.h"
#include "ruby/version.h"
@@ -119,10 +118,6 @@ extern void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lo
extern int rb_thread_create_mjit_thread(void (*child_hook)(void), void (*worker_func)(void));
-/* process.c */
-rb_pid_t ruby_waitpid_locked(rb_vm_t *, rb_pid_t, int *status, int options,
- rb_nativethread_cond_t *cond);
-
#define RB_CONDATTR_CLOCK_MONOTONIC 1
#ifdef _WIN32
@@ -268,7 +263,7 @@ real_ms_time(void)
static int
sprint_uniq_filename(char *str, size_t size, unsigned long id, const char *prefix, const char *suffix)
{
- return snprintf(str, size, "%s/%sp%"PRI_PIDT_PREFIX"uu%lu%s", tmp_dir, prefix, getpid(), id, suffix);
+ return snprintf(str, size, "%s/%sp%luu%lu%s", tmp_dir, prefix, (unsigned long) getpid(), id, suffix);
}
/* Return an unique file name in /tmp with PREFIX and SUFFIX and
@@ -406,42 +401,23 @@ start_process(const char *path, char *const *argv)
static int
exec_process(const char *path, char *const argv[])
{
- int stat, exit_code = -2;
+ int stat, exit_code;
pid_t pid;
- rb_vm_t *vm = (RUBY_SIGCHLD || SIGCHLD_LOSSY) ? GET_VM() : 0;
- rb_nativethread_cond_t cond;
-
- if (vm) {
- rb_native_cond_initialize(&cond);
- rb_native_mutex_lock(&vm->waitpid_lock);
- }
pid = start_process(path, argv);
- for (;pid > 0;) {
- pid_t r = vm ? ruby_waitpid_locked(vm, pid, &stat, 0, &cond)
- : waitpid(pid, &stat, 0);
- if (r == -1) {
- if (errno == EINTR) continue;
- fprintf(stderr, "[%"PRI_PIDT_PREFIX"d] waitpid(%"PRI_PIDT_PREFIX"d): %s (SIGCHLD=%d,%u)\n",
- getpid(), pid, strerror(errno),
- RUBY_SIGCHLD, SIGCHLD_LOSSY);
+ if (pid <= 0)
+ return -2;
+
+ for (;;) {
+ waitpid(pid, &stat, 0);
+ if (WIFEXITED(stat)) {
+ exit_code = WEXITSTATUS(stat);
+ break;
+ } else if (WIFSIGNALED(stat)) {
+ exit_code = -1;
break;
- }
- else if (r == pid) {
- if (WIFEXITED(stat)) {
- exit_code = WEXITSTATUS(stat);
- break;
- } else if (WIFSIGNALED(stat)) {
- exit_code = -1;
- break;
- }
}
}
-
- if (vm) {
- rb_native_mutex_unlock(&vm->waitpid_lock);
- rb_native_cond_destroy(&cond);
- }
return exit_code;
}
@@ -1515,15 +1491,12 @@ mjit_init(struct mjit_options *opts)
static void
stop_worker(void)
{
- rb_execution_context_t *ec = GET_EC();
-
stop_worker_p = TRUE;
while (!worker_stopped) {
verbose(3, "Sending cancel signal to worker");
CRITICAL_SECTION_START(3, "in stop_worker");
rb_native_cond_broadcast(&mjit_worker_wakeup);
CRITICAL_SECTION_FINISH(3, "in stop_worker");
- RUBY_VM_CHECK_INTS(ec);
}
}