summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-19 04:40:22 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-19 04:40:22 +0000
commit4ea96ece8400f1c6caa8a2429f6d93f15434238f (patch)
tree577fa0eb2d207dca593a9a0e8316dde7fa15ecfb /signal.c
parentb945ad289f14c1b1ba65bdd9a4e1106f3cee134c (diff)
* internal.h: added a declaration of ruby_kill().
* thread.c (ruby_kill): helper function of kill(). * signal.c (rb_f_kill): use ruby_kill() instead of kill(). * signal.c (rb_f_kill): call rb_thread_execute_interrupts() to ensure that make SignalException if sent a signal to myself. [Bug #7951] [ruby-core:52864] * vm_core.h (typedef struct rb_thread_struct): added th->interrupt_cond. * thread.c (rb_threadptr_interrupt_common): added to initialization of th->interrupt_cond. * thread.c (thread_create_core): ditto. * test/ruby/test_signal.rb (TestSignal#test_hup_me): test for the above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/signal.c b/signal.c
index 7ea63677f8..c29a3fbc42 100644
--- a/signal.c
+++ b/signal.c
@@ -18,6 +18,7 @@
#include <errno.h>
#include "ruby_atomic.h"
#include "eval_intern.h"
+#include "internal.h"
#if defined(__native_client__) && defined(NACL_NEWLIB)
# include "nacl/signal.h"
@@ -421,10 +422,11 @@ rb_f_kill(int argc, VALUE *argv)
}
else {
for (i=1; i<argc; i++) {
- if (kill(NUM2PIDT(argv[i]), sig) < 0)
- rb_sys_fail(0);
+ ruby_kill(NUM2PIDT(argv[i]), sig);
}
}
+ rb_thread_execute_interrupts(rb_thread_current());
+
return INT2FIX(i-1);
}