whoami7 - Manager
:
/
proc
/
self
/
root
/
usr
/
local
/
rvm
/
patches
/
ruby
/
1.8.7
/
p72
/
Upload File:
files >> //proc/self/root/usr/local/rvm/patches/ruby/1.8.7/p72/mbari-2.patch
diff -rux '*.o' ruby-1.8.7-p72/ChangeLog ruby-1.8.7-mbari/ChangeLog --- ruby-1.8.7-p72/ChangeLog 2008-12-12 21:32:52.000000000 -0800 +++ ruby-1.8.7-mbari/ChangeLog 2008-12-12 21:58:04.000000000 -0800 @@ -1,3 +1,14 @@ +Tue Dec 12 6:11:36 2008 Brent Roman <brent@mbari.org> + + * eval.c: exclude other thread's stack frames from current one + + * gc.c: STACK_LENGTH macro takes start parameter + + * node.h: added stk_start pointer to ruby thread struct + + * intern.h: stack_length takes base pointer as parameter + + Tue Dec 9 8:11:36 2008 Brent Roman <brent@mbari.org> * eval.c: added Continuation.thread method diff -rux '*.o' ruby-1.8.7-p72/eval.c ruby-1.8.7-mbari/eval.c --- ruby-1.8.7-p72/eval.c 2008-12-12 21:32:52.000000000 -0800 +++ ruby-1.8.7-mbari/eval.c 2008-12-12 22:34:34.000000000 -0800 @@ -3,7 +3,7 @@ eval.c - $Author: brent $ - $Date: 2008/12/11 04:42:40 $ + $Date: 2008/12/13 06:34:34 $ created at: Thu Jun 10 14:22:17 JST 1993 Copyright (C) 1993-2003 Yukihiro Matsumoto @@ -5141,6 +5141,7 @@ tt->retval = result; JUMP_TAG(TAG_BREAK); } + if (tt->tag == PROT_THREAD) break; tt = tt->prev; } proc_jump_error(TAG_BREAK, result); @@ -6572,6 +6573,7 @@ scope_dup(ruby_scope); for (tag=prot_tag; tag; tag=tag->prev) { + if (tag->tag == PROT_THREAD) break; scope_dup(tag->scope); } for (vars = ruby_dyna_vars; vars; vars = vars->next) { @@ -10367,14 +10369,19 @@ return (double)tv.tv_sec + (double)tv.tv_usec * 1e-6; } -#define STACK(addr) (th->stk_pos<(VALUE*)(addr) && (VALUE*)(addr)<th->stk_pos+th->stk_len) -#define ADJ(addr) (void*)(STACK(addr)?(((VALUE*)(addr)-th->stk_pos)+th->stk_ptr):(VALUE*)(addr)) + +#define ADJ(addr) \ + if ((size_t)((void *)addr - stkBase) < stkSize) addr=(void *)addr + stkShift + static void thread_mark(th) rb_thread_t th; { struct FRAME *frame; struct BLOCK *block; + void *stkBase; + ptrdiff_t stkShift; + size_t stkSize; rb_gc_mark(th->result); rb_gc_mark(th->thread); @@ -10409,15 +10416,26 @@ } #endif } + + stkBase = (void *)th->stk_start; + stkSize = th->stk_len * sizeof(VALUE); +#if STACK_GROW_DIRECTION == 0 + if ((VALUE *)&th < rb_gc_stack_start) +#endif +#if STACK_GROW_DIRECTION <= 0 + stkBase -= stkSize; +#endif + stkShift = (void *)th->stk_ptr - stkBase; + frame = th->frame; while (frame && frame != top_frame) { - frame = ADJ(frame); + ADJ(frame); rb_gc_mark_frame(frame); if (frame->tmp) { struct FRAME *tmp = frame->tmp; while (tmp && tmp != top_frame) { - tmp = ADJ(tmp); + ADJ(tmp); rb_gc_mark_frame(tmp); tmp = tmp->prev; } @@ -10426,7 +10444,7 @@ } block = th->block; while (block) { - block = ADJ(block); + ADJ(block); rb_gc_mark_frame(&block->frame); block = block->prev; } @@ -10579,13 +10597,10 @@ rb_thread_save_context(th) rb_thread_t th; { - VALUE *pos; int len; static VALUE tval; - len = ruby_stack_length(&pos); - th->stk_len = 0; - th->stk_pos = pos; + len = ruby_stack_length(th->stk_start,&th->stk_pos); if (len > th->stk_max) { VALUE *ptr = realloc(th->stk_ptr, sizeof(VALUE) * len); if (!ptr) rb_memerror(); @@ -12065,6 +12080,7 @@ th->result = 0;\ th->flags = 0;\ \ + th->stk_start = rb_gc_stack_start;\ th->stk_ptr = 0;\ th->stk_len = 0;\ th->stk_max = 0;\ @@ -12234,6 +12250,16 @@ "can't start a new thread (frozen ThreadGroup)"); } + + th->stk_start = /* establish start of new thread's stack */ +#if STACK_GROW_DIRECTION > 0 + (VALUE *)ruby_frame; +#elif STACK_GROW_DIRECTION < 0 + (VALUE *)(ruby_frame+1); +#else + (VALUE *)(ruby_frame+((VALUE *)(&arg)<rb_gc_stack_start)) +#endif + if (!thread_init) { thread_init = 1; #if defined(HAVE_SETITIMER) || defined(_THREAD_SAFE) @@ -12277,6 +12303,8 @@ PUSH_TAG(PROT_THREAD); if ((state = EXEC_TAG()) == 0) { if (THREAD_SAVE_CONTEXT(th) == 0) { + ruby_frame->prev = top_frame; /* hide parent thread's frames */ + ruby_frame->tmp = 0; curr_thread = th; th->result = (*fn)(arg, th); } @@ -12388,9 +12416,6 @@ VALUE klass; { rb_thread_t th = rb_thread_alloc(klass); - volatile VALUE *pos; - - pos = th->stk_pos; rb_obj_call_init(th->thread, argc, argv); if (th->stk_pos == 0) { rb_raise(rb_eThreadError, "uninitialized thread - check `%s#initialize'", @@ -13082,6 +13107,7 @@ scope_dup(ruby_scope); for (tag=prot_tag; tag; tag=tag->prev) { + if (tag->tag == PROT_THREAD) break; scope_dup(tag->scope); } diff -rux '*.o' ruby-1.8.7-p72/gc.c ruby-1.8.7-mbari/gc.c --- ruby-1.8.7-p72/gc.c 2008-08-03 20:24:26.000000000 -0700 +++ ruby-1.8.7-mbari/gc.c 2008-12-12 21:47:46.000000000 -0800 @@ -2,8 +2,8 @@ gc.c - - $Author: shyouhei $ - $Date: 2008-08-04 12:24:26 +0900 (Mon, 04 Aug 2008) $ + $Author: brent $ + $Date: 2008/12/13 05:47:46 $ created at: Tue Oct 5 09:44:46 JST 1993 Copyright (C) 1993-2003 Yukihiro Matsumoto @@ -506,12 +506,12 @@ # define STACK_END (stack_end) #endif #if STACK_GROW_DIRECTION < 0 -# define STACK_LENGTH (rb_gc_stack_start - STACK_END) +# define STACK_LENGTH(start) ((start) - STACK_END) #elif STACK_GROW_DIRECTION > 0 -# define STACK_LENGTH (STACK_END - rb_gc_stack_start + 1) +# define STACK_LENGTH(start) (STACK_END - (start) + 1) #else -# define STACK_LENGTH ((STACK_END < rb_gc_stack_start) ? rb_gc_stack_start - STACK_END\ - : STACK_END - rb_gc_stack_start + 1) +# define STACK_LENGTH(start) ((STACK_END < (start)) ? (start) - STACK_END\ + : STACK_END - (start) + 1) #endif #if STACK_GROW_DIRECTION > 0 # define STACK_UPPER(x, a, b) a @@ -536,16 +536,16 @@ #define CHECK_STACK(ret) do {\ SET_STACK_END;\ - (ret) = (STACK_LENGTH > STACK_LEVEL_MAX + GC_WATER_MARK);\ + (ret) = (STACK_LENGTH(rb_gc_stack_start) > STACK_LEVEL_MAX + GC_WATER_MARK);\ } while (0) int -ruby_stack_length(p) - VALUE **p; +ruby_stack_length(start, base) + VALUE *start, **base; { SET_STACK_END; - if (p) *p = STACK_UPPER(STACK_END, rb_gc_stack_start, STACK_END); - return STACK_LENGTH; + if (base) *base = STACK_UPPER(STACK_END, start, STACK_END); + return STACK_LENGTH(start); } int diff -rux '*.o' ruby-1.8.7-p72/intern.h ruby-1.8.7-mbari/intern.h --- ruby-1.8.7-p72/intern.h 2008-07-06 20:29:28.000000000 -0700 +++ ruby-1.8.7-mbari/intern.h 2008-12-12 21:03:16.000000000 -0800 @@ -251,7 +251,7 @@ /* gc.c */ NORETURN(void rb_memerror __((void))); int ruby_stack_check _((void)); -int ruby_stack_length _((VALUE**)); +int ruby_stack_length _((VALUE *,VALUE**)); int rb_during_gc _((void)); char *rb_source_filename _((const char*)); void rb_gc_mark_locations _((VALUE*, VALUE*)); diff -rux '*.o' ruby-1.8.7-p72/node.h ruby-1.8.7-mbari/node.h --- ruby-1.8.7-p72/node.h 2008-07-06 23:17:24.000000000 -0700 +++ ruby-1.8.7-mbari/node.h 2008-12-12 21:02:23.000000000 -0800 @@ -2,8 +2,8 @@ node.h - - $Author: shyouhei $ - $Date: 2008-07-07 15:17:24 +0900 (Mon, 07 Jul 2008) $ + $Author: brent $ + $Date: 2008/12/13 05:02:23 $ created at: Fri May 28 15:14:02 JST 1993 Copyright (C) 1993-2003 Yukihiro Matsumoto @@ -409,10 +409,8 @@ VALUE result; - long stk_len; - long stk_max; - VALUE *stk_ptr; - VALUE *stk_pos; + long stk_len, stk_max; + VALUE *stk_ptr, *stk_pos, *stk_start; #ifdef __ia64 long bstr_len; long bstr_max; diff -rux '*.o' ruby-1.8.7-p72/version.h ruby-1.8.7-mbari/version.h --- ruby-1.8.7-p72/version.h 2008-12-12 21:32:52.000000000 -0800 +++ ruby-1.8.7-mbari/version.h 2008-12-12 21:31:44.000000000 -0800 @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.8.7" -#define RUBY_RELEASE_DATE "2008-12-09" +#define RUBY_RELEASE_DATE "2008-12-12" #define RUBY_VERSION_CODE 187 -#define RUBY_RELEASE_CODE 20081209 +#define RUBY_RELEASE_CODE 20081212 #define RUBY_PATCHLEVEL 72 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 7 #define RUBY_RELEASE_YEAR 2008 #define RUBY_RELEASE_MONTH 12 -#define RUBY_RELEASE_DAY 9 +#define RUBY_RELEASE_DAY 12 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; @@ -25,7 +25,7 @@ #define RUBY_BIRTH_MONTH 2 #define RUBY_BIRTH_DAY 24 -#define RUBY_RELEASE_STR "MBARI 1 on patchlevel" +#define RUBY_RELEASE_STR "MBARI 2 on patchlevel" #define RUBY_RELEASE_NUM RUBY_PATCHLEVEL
Copyright ©2021 || Defacer Indonesia