diff --git a/ChangeLog b/ChangeLog index 8c25b92c94..a20eb74a86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Sat Feb 5 00:59:54 2011 KOSAKI Motohiro + + * vm_core.h (GetThreadPtr): use TypedData_Get_Struct() instead + CoreDataFromValue() because we need type check. Otherwise, + type mismatch can cause segmentation fault crash. + [ruby-core:35086] [Ruby 1.9-Bug#4367] + + * vm.c (thread_data_type): remove static. + Fri Feb 4 19:14:27 2011 Tanaka Akira * enc/trans/utf8_mac.trans: parenthesize macro arguments. diff --git a/vm.c b/vm.c index 130ca64160..1dbf2ecabb 100644 --- a/vm.c +++ b/vm.c @@ -1756,7 +1756,7 @@ thread_memsize(const void *ptr) } } -static const rb_data_type_t thread_data_type = { +const rb_data_type_t thread_data_type = { "VM/thread", { rb_thread_mark, diff --git a/vm_core.h b/vm_core.h index a0b60b5074..f20dfb02f3 100644 --- a/vm_core.h +++ b/vm_core.h @@ -347,8 +347,10 @@ typedef struct rb_block_struct { VALUE proc; } rb_block_t; +extern const rb_data_type_t thread_data_type; + #define GetThreadPtr(obj, ptr) \ - GetCoreDataFromValue((obj), rb_thread_t, (ptr)) + TypedData_Get_Struct((obj), rb_thread_t, &thread_data_type, (ptr)) enum rb_thread_status { THREAD_TO_KILL,