From 034540dbc1f761221c1977465b13b00b4f558108 Mon Sep 17 00:00:00 2001 From: kosaki Date: Fri, 4 Feb 2011 16:05:40 +0000 Subject: * 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30781 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ vm.c | 2 +- vm_core.h | 4 +++- 3 files changed, 13 insertions(+), 2 deletions(-) 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, -- cgit v1.2.3