summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-01 17:16:03 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-01 17:16:03 +0000
commit06042f854ff815c6287bce132ed8e23d2a600a93 (patch)
tree89831d237e39fbba5732a80ce4bf568829cd6e3e /thread.c
parent478a0180c4713da8b32438e668fb69765423b269 (diff)
merge revision(s) r45911,r45912,r45917,r45918,r45919: [Backport #9820]
* signal.c (rb_f_kill): directly enqueue an ignored signal to self, except for SIGSEGV and SIGBUS. [ruby-dev:48203] [Bug #9820] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47345 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/thread.c b/thread.c
index b51698fc24..d9df90272e 100644
--- a/thread.c
+++ b/thread.c
@@ -5320,13 +5320,12 @@ ruby_kill(rb_pid_t pid, int sig)
{
int err;
rb_thread_t *th = GET_THREAD();
- rb_vm_t *vm = GET_VM();
/*
* When target pid is self, many caller assume signal will be
* delivered immediately and synchronously.
*/
- if ((sig != 0) && (th == vm->main_thread) && (pid == getpid())) {
+ {
GVL_UNLOCK_BEGIN();
native_mutex_lock(&th->interrupt_lock);
err = kill(pid, sig);
@@ -5334,9 +5333,7 @@ ruby_kill(rb_pid_t pid, int sig)
native_mutex_unlock(&th->interrupt_lock);
GVL_UNLOCK_END();
}
- else {
- err = kill(pid, sig);
- }
- if (err < 0)
+ if (err < 0) {
rb_sys_fail(0);
+ }
}