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

Revert "process.c: try to workaroun SEGV by r65994"

This reverts commit 0e6aba22c6.

because it didn't help, at all.
http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/1480207

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65998 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
k0kubun 2018-11-26 15:12:30 +00:00
parent 0e6aba22c6
commit 5b12501163
4 changed files with 16 additions and 35 deletions

View file

@ -1634,12 +1634,12 @@ VALUE rb_math_sqrt(VALUE);
extern int mjit_enabled; extern int mjit_enabled;
VALUE mjit_pause(int wait_p); VALUE mjit_pause(int wait_p);
VALUE mjit_resume(void); VALUE mjit_resume(void);
void mjit_clean_files(void); void mjit_finish(void);
#else #else
#define mjit_enabled 0 #define mjit_enabled 0
static inline VALUE mjit_pause(int wait_p){ return Qnil; } /* unreachable */ static inline VALUE mjit_pause(int wait_p){ return Qnil; } /* unreachable */
static inline VALUE mjit_resume(void){ return Qnil; } /* unreachable */ static inline VALUE mjit_resume(void){ return Qnil; } /* unreachable */
static void mjit_clean_files(void){} static inline void mjit_finish(void){}
#endif #endif
/* newline.c */ /* newline.c */

37
mjit.c
View file

@ -785,29 +785,6 @@ mjit_child_after_fork(void)
start_worker(); start_worker();
} }
/* Half-baked version of mjit_finish(). It just deletes MJIT-related files.
Caller should disable MJIT because it won't work without the deleted files.
We want to use mjit_finish() for this function's usage but it's somehow broken like:
http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/1480173 */
void
mjit_clean_files(void)
{
#ifndef _MSC_VER /* mswin has prebuilt precompiled header */
if (!mjit_opts.save_temps && getpid() == pch_owner_pid)
remove_file(pch_file);
xfree(header_file); header_file = NULL;
#endif
xfree(tmp_dir); tmp_dir = NULL;
xfree(pch_file); pch_file = NULL;
mjit_call_p = FALSE;
free_list(&unit_queue);
free_list(&active_units);
free_list(&compact_units);
}
/* Finish the threads processing units and creating PCH, finalize /* Finish the threads processing units and creating PCH, finalize
and free MJIT data. It should be called last during MJIT and free MJIT data. It should be called last during MJIT
life. */ life. */
@ -840,7 +817,19 @@ mjit_finish(void)
rb_native_cond_destroy(&mjit_worker_wakeup); rb_native_cond_destroy(&mjit_worker_wakeup);
rb_native_cond_destroy(&mjit_gc_wakeup); rb_native_cond_destroy(&mjit_gc_wakeup);
mjit_clean_files(); #ifndef _MSC_VER /* mswin has prebuilt precompiled header */
if (!mjit_opts.save_temps && getpid() == pch_owner_pid)
remove_file(pch_file);
xfree(header_file); header_file = NULL;
#endif
xfree(tmp_dir); tmp_dir = NULL;
xfree(pch_file); pch_file = NULL;
mjit_call_p = FALSE;
free_list(&unit_queue);
free_list(&active_units);
free_list(&compact_units);
finish_conts(); finish_conts();
mjit_enabled = FALSE; mjit_enabled = FALSE;

2
mjit.h
View file

@ -66,7 +66,6 @@ RUBY_SYMBOL_EXPORT_END
extern int mjit_compile(FILE *f, const struct rb_iseq_constant_body *body, const char *funcname, struct rb_call_cache *cc_entries, union iseq_inline_storage_entry *is_entries); extern int mjit_compile(FILE *f, const struct rb_iseq_constant_body *body, const char *funcname, struct rb_call_cache *cc_entries, union iseq_inline_storage_entry *is_entries);
extern void mjit_init(struct mjit_options *opts); extern void mjit_init(struct mjit_options *opts);
extern void mjit_finish(void);
extern void mjit_gc_start_hook(void); extern void mjit_gc_start_hook(void);
extern void mjit_gc_finish_hook(void); extern void mjit_gc_finish_hook(void);
extern void mjit_free_iseq(const rb_iseq_t *iseq); extern void mjit_free_iseq(const rb_iseq_t *iseq);
@ -132,7 +131,6 @@ void mjit_child_after_fork(void);
#else /* USE_MJIT */ #else /* USE_MJIT */
static inline struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec){return NULL;} static inline struct mjit_cont *mjit_cont_new(rb_execution_context_t *ec){return NULL;}
static inline void mjit_cont_free(struct mjit_cont *cont){} static inline void mjit_cont_free(struct mjit_cont *cont){}
static inline void mjit_finish(void){}
static inline void mjit_gc_start_hook(void){} static inline void mjit_gc_start_hook(void){}
static inline void mjit_gc_finish_hook(void){} static inline void mjit_gc_finish_hook(void){}
static inline void mjit_free_iseq(const rb_iseq_t *iseq){} static inline void mjit_free_iseq(const rb_iseq_t *iseq){}

View file

@ -2944,13 +2944,7 @@ rb_f_exec(int argc, const VALUE *argv)
execarg_obj = rb_execarg_new(argc, argv, TRUE, FALSE); execarg_obj = rb_execarg_new(argc, argv, TRUE, FALSE);
eargp = rb_execarg_get(execarg_obj); eargp = rb_execarg_get(execarg_obj);
if (mjit_enabled) { if (mjit_enabled) mjit_finish(); /* do not leave files or leak children */
/* TODO: Use mjit_finish() here. We're not doing so because it leads SEGV
http://ci.rvm.jp/results/trunk-mjit-wait@silicon-docker/1480173 and we don't know why. */
mjit_pause(FALSE); /* do not leak children */
mjit_clean_files(); /* do not leave files. */
mjit_enabled = FALSE; /* MJIT won't work without files deleted above. never JIT-able after exec failure + rescue, for now. */
}
before_exec(); /* stop timer thread before redirects */ before_exec(); /* stop timer thread before redirects */
rb_execarg_parent_start(execarg_obj); rb_execarg_parent_start(execarg_obj);
fail_str = eargp->use_shell ? eargp->invoke.sh.shell_script : eargp->invoke.cmd.command_name; fail_str = eargp->use_shell ? eargp->invoke.sh.shell_script : eargp->invoke.cmd.command_name;