summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-29 02:50:11 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-29 02:50:11 +0000
commitc058d821f84287dd8812b6cac3edf6cd6f1bc364 (patch)
tree8617a306f54606956b144d895daca8318baa3698 /thread.c
parent989c529c8999a03faf8c17c5b3068e73e632be6d (diff)
Revert r37956: thread.c (thread_start_func_2): small cleanups.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37964 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/thread.c b/thread.c
index dae4194599..6d4e060c5d 100644
--- a/thread.c
+++ b/thread.c
@@ -507,7 +507,6 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
}
th->value = Qnil;
}
- TH_POP_TAG();
th->status = THREAD_KILLED;
thread_debug("thread end: %p\n", (void *)th);
@@ -517,6 +516,13 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
/* treat with normal error object */
rb_threadptr_raise(main_th, 1, &errinfo);
}
+ TH_POP_TAG();
+
+ /* locking_mutex must be Qfalse */
+ if (th->locking_mutex != Qfalse) {
+ rb_bug("thread_start_func_2: locking_mutex must not be set (%p:%"PRIxVALUE")",
+ (void *)th, th->locking_mutex);
+ }
/* delete self other than main thread from living_threads */
st_delete_wrap(th->vm->living_threads, th->self);
@@ -525,14 +531,6 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
rb_threadptr_interrupt(main_th);
}
- /* locking_mutex must be Qfalse */
- if (th->locking_mutex != Qfalse) {
- rb_bug("thread_start_func_2: locking_mutex must not be set (%p:%"PRIxVALUE")",
- (void *)th, th->locking_mutex);
- }
- rb_threadptr_unlock_all_locking_mutexes(th);
- rb_check_deadlock(th->vm);
-
/* wake up joining threads */
join_list = th->join_list;
while (join_list) {
@@ -545,6 +543,9 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
join_list = join_list->next;
}
+ rb_threadptr_unlock_all_locking_mutexes(th);
+ rb_check_deadlock(th->vm);
+
if (!th->root_fiber) {
rb_thread_recycle_stack_release(th->stack);
th->stack = 0;