# \[Bug #968\] trap may fail to handle signals

**URL:** <https://www.ruby-forum.com/t/bug-968-trap-may-fail-to-handle-signals/156741>\
**Category:** Development\
**Created:** [January 2, 2009, 9:10am UTC](https://www.ruby-forum.com/t/bug-968-trap-may-fail-to-handle-signals/156741 "2009-01-02T09:10:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yusuke\_E](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/f08c70/32.png) [@Yusuke\_E](https://www.ruby-forum.com/u/Yusuke_E)\
**Post date:** [January 2, 2009, 9:10am UTC](https://www.ruby-forum.com/t/bug-968-trap-may-fail-to-handle-signals/156741/1 "2009-01-02T09:10:50Z")

</div>

Bug #968: trap may fail to handle signals  
[http://redmine.ruby-lang.org/issues/show/968](http://redmine.ruby-lang.org/issues/show/968)

e$B5/I\<\<Te(B: Yusuke E.  
e$B%9%F!\<%?%9e(B: Open, e$BM%@hEYe(B: Normal  
e$BC4Ev\<Te(B: Koichi Sasada, e$B%+%F%4%je(B: YARV, Target version: 1.9.1  
RC2

e$B1sF#$G$9!#e(B

e$B%7%0%J%k$,O"B3$7$FAw$i$l$?$H$-!"%7%0%J%k$rFI$_Mn$H$9$3$H$,e(B  
e$B$"$k$h$&$G$9!#6qBNE\*$K$O!"0J2\<$N%W%m%0%i%`$,Dd;_$7$^$;$s!#e(B

./ruby -e ’  
n = 0  
trap(:USR1) { n += 1 }  
30.times { Process.kill(:USR1, $$) }  
until n == 30  
1000\*\*100000 # wait  
p n  
end  
’

e$B$3$l$O;EMM$G$7$g$&$+!#e(B  
e$B;EMM$G$J$1$l$P!"0J2\<$N$h$&$J%Q%C%A$G$I$&$G$7$g$&$+!#e(B

# Index: thread.c

— thread.c (revision 21269)  
+++ thread.c (working copy)  
@@ -1145,6 +1145,10 @@  
void  
rb\_thread\_execute\_interrupts(rb\_thread\_t \*th)  
{

- if (GET\_VM()-\>main\_thread == th) {

- while (rb\_signal\_buff\_size() && !th-\>exec\_signal)  
native\_thread\_yield();

- }

- if (th-\>raised\_flag) return;

- rb\_thread\_t \*mth;

- if ((sig = rb\_get\_next\_signal()) \> 0) {
- rb\_thread\_t \*mth = vm-\>main\_thread;

- mth = vm-\>main\_thread;
- if (!mth-\>exec\_signal && (sig = rb\_get\_next\_signal()) \> 0) {  
enum rb\_thread\_status prev\_status = mth-\>status;  
thread\_debug(“main\_thread: %s, sig: %d\n”,  
thread\_status\_name(prev\_status), sig);

–  
Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Yusuke\_E](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/f08c70/32.png) [@Yusuke\_E](https://www.ruby-forum.com/u/Yusuke_E)\
**Post date:** [January 3, 2009, 4:58pm UTC](https://www.ruby-forum.com/t/bug-968-trap-may-fail-to-handle-signals/156741/2 "2009-01-03T16:58:42Z")

</div>

e$B%A%1%C%He(B #968 e$B$,99?7$5$l$^$7$?!#e(B (by Yusuke E.)

e$B1sF#$G$9!#e(B

e$BJdB-$G$9!#e(B

e$B%7%0%J%k$,O"B3$7$FAw$i$l$?$H$-!“$=$N2s?t$@$1%7%0%J%k%O%s%I%i$,8F$P$l$ke(B  
e$B$H$$$&J]\>c$Oe(B OS e$B%l%Y%k$GB8:\_$7$J$$$HJ9$-$^$7$?!#e(B  
e$B$?$@:#$Ne(B Ruby e$B$O!”$;$C$+$/%7%0%J%k%O%s%I%i$,8F$P$l$?\>l9g$G$be(B  
trap e$B$re(B  
e$B8F$SB;$M$k\>l9g$,$"$j$^$9!#e(B

e$B$^$?!“\<oN`$,0[$J$k%7%0%J%k$G$be(B trap  
e$B$r8F$SB;$M$k\>l9g$,$”$k$N$G$9$,!"e(B  
Unix e$B$G$O$3$l$9$iJ]\>c$5$l$J$$$N$G$7$g$&$+!#e(B

$ ./ruby -e ’  
n = 0  
trap(:USR1) { n += 1 }  
trap(:USR2) { n += 1 }

pid = $$  
fork do  
sleep 0.5  
p “send start”  
Process.kill(:USR1, pid)  
Process.kill(:USR2, pid)  
p “send end”  
end

p “calc start”  
1000\*\*100000 # wait  
p “calc end”

p n  
’  
“calc start”  
“send start”  
“send end”  
“calc end”  
1

e$B8=:\_e(B test-all e$B$Ne(B TestSignal#test\_exit\_action  
e$B$,7k9=$J3NN($G\<:GT$7$^$9$,!"e(B  
e$B$3$l$bF1$8LdBj$N$h$&$G!“A0=R$N%Q%C%A$rEv$F$k$HDL$k$h$&$K$J$j$^$9!#e(B  
e$B;d$N4D6-$G9b3NN($Ge(B 0F0E e$B$K$J$k$N$G!”$&$l$7$$$G$9e(B (Rinda  
e$B$N%F%9%H$,e(B  
e$B5)$K\<:GT$7$^$9$,e(B) e$B!#e(B

e$B$H$$$&$o$1$G!“@Q6KE\*$JH?BP$,$J$1$l$P$H$j$”$($:%3%\_%C%H$7$F$7$^$\*$&e(B  
e$B$H;W$$$^$9!#e(B

–  
Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

* * *

[http://redmine.ruby-lang.org/issues/show/968](http://redmine.ruby-lang.org/issues/show/968)

---

<div class="post-metadata">

**Author:** ![Yusuke\_E](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/f08c70/32.png) [@Yusuke\_E](https://www.ruby-forum.com/u/Yusuke_E)\
**Post date:** [January 15, 2009, 6:37pm UTC](https://www.ruby-forum.com/t/bug-968-trap-may-fail-to-handle-signals/156741/3 "2009-01-15T18:37:58Z")

</div>

e$B%A%1%C%He(B #968 e$B$,99?7$5$l$^$7$?!#e(B (by Yusuke E.)

e$B%9%F!\<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B  
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

## Applied in changeset r21582.

[http://redmine.ruby-lang.org/issues/show/968](http://redmine.ruby-lang.org/issues/show/968)
