diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-05-11 13:56:18 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-05-11 13:56:18 +0200 |
commit | 99685e6a7e586acbf3383977ce6d029583b68ded (patch) | |
tree | b9761d857569fe00f8bc33a2a43282cbdc1a4f32 | |
parent | 6800186a03855c1a1c51fb6abb793306851db2ad (diff) | |
download | vim-git-99685e6a7e586acbf3383977ce6d029583b68ded.tar.gz |
updated for version 7.3.933v7.3.933
Problem: Ruby on Mac crashes due to GC failure.
Solution: Init the stack from main(). (Hiroshi Shirosaki)
-rw-r--r-- | src/if_ruby.c | 17 | ||||
-rw-r--r-- | src/main.c | 7 | ||||
-rw-r--r-- | src/proto/if_ruby.pro | 1 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 22 insertions, 5 deletions
diff --git a/src/if_ruby.c b/src/if_ruby.c index d79d0eeb7..f1752f047 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -144,6 +144,7 @@ #endif static int ruby_initialized = 0; +static void *ruby_stack_start; static VALUE objtbl; static VALUE mVIM; @@ -226,6 +227,7 @@ static void ruby_vim_init(void); # define rb_float_new dll_rb_float_new # define rb_ary_new dll_rb_ary_new # define rb_ary_push dll_rb_ary_push +# define ruby_init_stack dll_ruby_init_stack #else # define rb_str2cstr dll_rb_str2cstr #endif @@ -250,7 +252,6 @@ static void ruby_vim_init(void); # define rb_enc_str_new dll_rb_enc_str_new # define rb_sprintf dll_rb_sprintf # define rb_require dll_rb_require -# define ruby_init_stack dll_ruby_init_stack # define ruby_process_options dll_ruby_process_options #endif @@ -335,6 +336,7 @@ static char * (*dll_rb_string_value_ptr) (volatile VALUE*); static VALUE (*dll_rb_float_new) (double); static VALUE (*dll_rb_ary_new) (void); static VALUE (*dll_rb_ary_push) (VALUE, VALUE); +static void (*ruby_init_stack)(VALUE*); #endif #ifdef RUBY19_OR_LATER static VALUE (*dll_rb_int2big)(SIGNED_VALUE); @@ -347,7 +349,6 @@ static rb_encoding* (*dll_rb_enc_find) (const char*); static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*); static VALUE (*dll_rb_sprintf) (const char*, ...); static VALUE (*dll_rb_require) (const char*); -static void (*ruby_init_stack)(VALUE*); static void* (*ruby_process_options)(int, char**); #endif @@ -475,6 +476,7 @@ static struct #endif #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 {"rb_string_value_ptr", (RUBY_PROC*)&dll_rb_string_value_ptr}, + {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack}, # if DYNAMIC_RUBY_VER <= 19 {"rb_float_new", (RUBY_PROC*)&dll_rb_float_new}, # else @@ -491,7 +493,6 @@ static struct {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new}, {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf}, {"rb_require", (RUBY_PROC*)&dll_rb_require}, - {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack}, {"ruby_process_options", (RUBY_PROC*)&dll_ruby_process_options}, #endif {"", NULL}, @@ -716,8 +717,8 @@ static int ensure_ruby_initialized(void) NtInitialize(&argc, &argv); #endif { -#ifdef RUBY19_OR_LATER - RUBY_INIT_STACK; +#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 + ruby_init_stack(ruby_stack_start); #endif ruby_init(); } @@ -1389,3 +1390,9 @@ static void ruby_vim_init(void) rb_define_virtual_variable("$curbuf", buffer_s_current, 0); rb_define_virtual_variable("$curwin", window_s_current, 0); } + +void vim_ruby_init(void *stack_start) +{ + /* should get machine stack start address early in main function */ + ruby_stack_start = stack_start; +} diff --git a/src/main.c b/src/main.c index cba8dce75..b524c7eda 100644 --- a/src/main.c +++ b/src/main.c @@ -192,6 +192,13 @@ main params.window_count = -1; #endif +#ifdef FEAT_RUBY + { + int ruby_stack_start; + vim_ruby_init((void *)&ruby_stack_start); + } +#endif + #ifdef FEAT_TCL vim_tcl_init(params.argv[0]); #endif diff --git a/src/proto/if_ruby.pro b/src/proto/if_ruby.pro index 7dedb225c..3e03b1f09 100644 --- a/src/proto/if_ruby.pro +++ b/src/proto/if_ruby.pro @@ -6,4 +6,5 @@ void ex_rubydo __ARGS((exarg_T *eap)); void ex_rubyfile __ARGS((exarg_T *eap)); void ruby_buffer_free __ARGS((buf_T *buf)); void ruby_window_free __ARGS((win_T *win)); +void vim_ruby_init __ARGS((void *stack_start)); /* vim: set ft=c : */ diff --git a/src/version.c b/src/version.c index 7c2eb6fe8..3cf57bba6 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 933, +/**/ 932, /**/ 931, |