8000 merge revision(s) r47818,r47832: [Backport #9820] · github/ruby@982aab0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 982aab0

Browse files
committed
merge revision(s) r47818,r47832: [Backport ruby#9820]
* signal.c (rb_f_kill): should not ignore signal unless the default handler is registered. [ruby-dev:48592] [Bug ruby#9820] * signal.c (rb_f_kill): get rid of deadlock as unhandled and discarded signals do not make interrupt_cond signaled. based on the patch by Kazuki Tsujimoto at [ruby-dev:48606]. [Bug ruby#9820] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47956 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 69fe55a commit 982aab0

File tree

4 files changed

+38
-4
lines c 8000 hanged

4 files changed

+38
-4
lines changed

ChangeLog

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
Thu Oct 16 00:10:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
2+
3+
* signal.c (rb_f_kill): get rid of deadlock as unhandled and
4+
discarded signals do not make interrupt_cond signaled.
5+
based on the patch by Kazuki Tsujimoto at [ruby-dev:48606].
6+
[Bug #9820]
7+
8+
Thu Oct 16 00:10:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
9+
10+
* signal.c (rb_f_kill): should not ignore signal unless the
11+
default handler is registered. [ruby-dev:48592] [Bug #9820]
12+
113
Wed Oct 15 23:58:13 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
214

315
merge r47598 partially. extracted commits are as follows. [Bug #9728]

signal.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ ruby_default_signal(int sig)
343343
raise(sig);
344344
}
345345

346+
static RETSIGTYPE sighandler(int sig);
346347
static int signal_ignored(int sig);
347348
static void signal_enque(int sig);
348349

@@ -449,6 +450,7 @@ rb_f_kill(int argc, VALUE *argv)
449450
rb_pid_t pid = NUM2PIDT(argv[i]);
450451

451452
if ((sig != 0) && (self != -1) && (pid == self)) {
453+
int t;
452454
/*
453455
* When target pid is self, many caller assume signal will be
454456
* delivered immediately and synchronously.
@@ -467,7 +469,12 @@ rb_f_kill(int argc, VALUE *argv)
467469
ruby_kill(pid, sig);
468470
break;
469471
default:
470-
if (signal_ignored(sig)) break;
472+
t = signal_ignored(sig);
473+
if (t) {
474+
if (t < 0 && kill(pid, sig))
475+
rb_sys_fail(0);
476+
break;
477+
}
471478
signal_enque(sig);
472479
wakeup = 1;
473480
}
@@ -612,16 +619,19 @@ ruby_nativethread_signal(int signum, sighandler_t handler)
612619
static int
613620
signal_ignored(int sig)
614621
{
622+
sighandler_t func;
615623
#ifdef POSIX_SIGNAL
616624
struct sigaction old;
617625
(void)VALGRIND_MAKE_MEM_DEFINED(&old, sizeof(old));
618626
if (sigaction(sig, NULL, &old) < 0) return FALSE;
619-
return old.sa_handler == SIG_IGN;
627+
func = old.sa_handler;
620628
#else
621629
sighandler_t old = signal(sig, SIG_DFL);
622630
signal(sig, old);
623-
return old == SIG_IGN;
631+
func = old;
624632
#endif
633+
if (func == SIG_IGN) return 1;
634+
return func == sighandler ? 0 : -1;
625635
}
626636

627637
static void

test/ruby/test_signal.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,5 +278,17 @@ def test_ignored_interrupt
278278
Process.kill(:INT, $$)
279279
end
280280
end;
281+
282+
if trap = Signal.list['TRAP']
283+
bug9820 = '[ruby-dev:48592] [Bug #9820]'
284+
status = assert_in_out_err(['-e', 'Process.kill(:TRAP, $$)'])
285+
assert_predicate(status, :signaled?, bug9820)
286+
assert_equal(trap, status.termsig, bug9820)
287+
end
288+
289+
if Signal.list['CONT']
290+
bug9820 = '[ruby-dev:48606] [Bug #9820]'
291+
assert_ruby_status(['-e', 'Process.kill(:CONT, $$)'])
292+
end
281293
end if Process.respond_to?(:kill)
282294
end

version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#define RUBY_VERSION "2.1.4"
22
#define RUBY_RELEASE_DATE "2014-10-16"
3-
#define RUBY_PATCHLEVEL 254
3+
#define RUBY_PATCHLEVEL 255
44

55
#define RUBY_RELEASE_YEAR 2014
66
#define RUBY_RELEASE_MONTH 10

0 commit comments

Comments
 (0)
0