diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-26 08:32:49 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-10-26 08:32:49 +0000 |
commit | 837fd5e494731d7d44786f29e7d6e8c27029806f (patch) | |
tree | 7ccbb6b6733ccb07c28b7df28e3e2a6b604cc731 /thread_win32.c | |
parent | 07f04f468d729b399b794198c61516f2e8ac0a89 (diff) | |
download | ruby-837fd5e494731d7d44786f29e7d6e8c27029806f.tar.gz |
Use rb_execution_context_t instead of rb_thread_t
to represent execution context [Feature #14038]
* vm_core.h (rb_thread_t): rb_thread_t::ec is now a pointer.
There are many code using `th` to represent execution context
(such as cfp, VM stack and so on). To access `ec`, they need to
use `th->ec->...` (adding one indirection) so that we need to
replace them by passing `ec` instead of `th`.
* vm_core.h (GET_EC()): introduced to access current ec. Also
remove `ruby_current_thread` global variable.
* cont.c (rb_context_t): introduce rb_context_t::thread_ptr instead of
rb_context_t::thread_value.
* cont.c (ec_set_vm_stack): added to update vm_stack explicitly.
* cont.c (ec_switch): added to switch ec explicitly.
* cont.c (rb_fiber_close): added to terminate fibers explicitly.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60440 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread_win32.c')
-rw-r--r-- | thread_win32.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/thread_win32.c b/thread_win32.c index 683fafc5ba..2e101b4368 100644 --- a/thread_win32.c +++ b/thread_win32.c @@ -140,10 +140,8 @@ ruby_thread_set_native(rb_thread_t *th) } void -Init_native_thread(void) +Init_native_thread(rb_thread_t *th) { - rb_thread_t *th = GET_THREAD(); - ruby_native_thread_key = TlsAlloc(); ruby_thread_set_native(th); DuplicateHandle(GetCurrentProcess(), @@ -546,8 +544,8 @@ native_thread_init_stack(rb_thread_t *th) size = end - base; space = size / 5; if (space > 1024*1024) space = 1024*1024; - th->ec.machine.stack_start = (VALUE *)end - 1; - th->ec.machine.stack_maxsize = size - space; + th->ec->machine.stack_start = (VALUE *)end - 1; + th->ec->machine.stack_maxsize = size - space; } #ifndef InterlockedExchangePointer @@ -575,7 +573,7 @@ thread_start_func_1(void *th_ptr) thread_debug("thread created (th: %p, thid: %p, event: %p)\n", th, th->thread_id, th->native_thread_data.interrupt_event); - thread_start_func_2(th, th->ec.machine.stack_start, rb_ia64_bsp()); + thread_start_func_2(th, th->ec->machine.stack_start, rb_ia64_bsp()); w32_close_handle(thread_id); thread_debug("thread deleted (th: %p)\n", th); |