Mutex#lock $B$H$+$r!$(Btrap handler
$BCf$G=PMh$J$$!$$C$F$N$O!$$9$_$^$;$s!$$I$N(B
$BJU$NOC$G$7$?$C$1!%(B
ruby-spec $B$,$3$l$GMn$A$F$$$k$N$G5$$,$D$-$^$7$?!%(B
$B$9$_$^$;$s!$$3$l$C$F$=$&$$$&$b$N$G$7$?$C$1!%(B
$B$A$g$C$H!$Bg$-$9$.$k$h$&$K;W$$$^$7$F!%(B
main thread $B$H(B trap handler
$BCf$G6%9g$,H/@8$9$k!J%G%C%I%m%C%/$K$J$k!K$N$O(B
$B$o$+$k$s$G$9$,!%(B
$B$A$g$C$H$7$?2sHr:v$G$9$,!$(B
(1) main thread $B$,%m%C%/$rJ];}$7$F$$$k(B
$B;~$N$_!$(BMutex#lock $B$,Nc30$rH/@8$5$;$k(B
$B$H$$$&$N$O$I$&$G$7$g$&$+!%$3$l$K$h$C$F!$(B
(a) trap $BFb$G407k$9$k(B lock $B$O$A$c$s$HF0$/(B
$B!J(Btrap $BFb$G(B unlock $B$7$J$$E[$O;`$M$P$$$$!K(B
(b) sub-thread $B$G(B lock $B$7$F$$$kE[$O!$(Btrap
$BFb$GBT$D$3$H$,$G$-$k(B
$B$H=PMh$k$H;W$$$^$9!%$$$+$,$G$7$g$&$+!%(B
$B$A$J$_$K!$(BPOSIX thread $B$O$I$&$J$C$F$k$s$G$7$?$C$1!%(B
-------- Original Message --------
Subject: [ruby-changes:25810] kosaki:r37867 (trunk): * thread.c
(rb_mutex_trylock, rb_mutex_unlock, mutex_sleep):
Date: Tue, 27 Nov 2012 00:17:13 +0900 (JST)
From: kosaki <ko1@atdot.net>
Reply-To: ruby-changes@quickml.atdot.net
To: ruby-changes@quickml.atdot.net
kosaki 2012-11-27 00:17:01 +0900 (Tue, 27 Nov 2012)
New Revision: 37867
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=r...
Log:
* thread.c (rb_mutex_trylock, rb_mutex_unlock, mutex_sleep):
raises ThreadError if called from trap handler as Thread#join.
* NEWS: news fot the above.
Modified files:
trunk/ChangeLog
trunk/NEWS
trunk/thread.c
Index: ChangeLog
===================================================================
--- ChangeLog (revision 37866)
+++ ChangeLog (revision 37867)
@@ -1,3 +1,9 @@
+Tue Nov 27 00:13:41 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_mutex_trylock, rb_mutex_unlock, mutex_sleep):
+ raises ThreadError if called from trap handler as Thread#join.
+ * NEWS: news fot the above.
+
Mon Nov 26 23:55:33 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
* NEWS: update for Thread#join incompatible change.
Index: thread.c
===================================================================
--- thread.c (revision 37866)
+++ thread.c (revision 37867)
@@ -4051,6 +4051,11 @@
VALUE locked = Qfalse;
GetMutexPtr(self, mutex);
+ /* When running trap handler */
+ if (GET_THREAD()->interrupt_mask & TRAP_INTERRUPT_MASK) {
+ rb_raise(rb_eThreadError, "can't be called from trap context");
+ }
+
native_mutex_lock(&mutex->lock);
if (mutex->th == 0) {
mutex->th = GET_THREAD();
@@ -4239,6 +4244,11 @@
rb_mutex_t *mutex;
GetMutexPtr(self, mutex);
+ /* When running trap handler */
+ if (GET_THREAD()->interrupt_mask & TRAP_INTERRUPT_MASK) {
+ rb_raise(rb_eThreadError, "can't be called from trap context");
+ }
+
err = rb_mutex_unlock_th(mutex, GET_THREAD());
if (err) rb_raise(rb_eThreadError, "%s", err);
@@ -4307,6 +4317,11 @@
{
VALUE timeout;
+ /* When running trap handler */
+ if (GET_THREAD()->interrupt_mask & TRAP_INTERRUPT_MASK) {
+ rb_raise(rb_eThreadError, "can't be called from trap context");
+ }
+
rb_scan_args(argc, argv, "01", &timeout);
return rb_mutex_sleep(self, timeout);
}
Index: NEWS
===================================================================
--- NEWS (revision 37866)
+++ NEWS (revision 37867)
@@ -105,6 +105,12 @@
* Module#const_get accepts a qualified constant string, e.g.
Object.const_get("Foo::Bar::Baz")
+ * Mutex
+ * incompatible changes:
+ * Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize
+ and Mutex#sleep no longer allows to be used from trap handler.
+ Now it raises ThreadError.
+
* NilClass
* added method:
* added nil.to_h which returns {}
@@ -350,3 +356,7 @@
* Thread#join
See above.
+
+ * Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize and
Mutex#sleep
+
+ See above.
on 2012-11-27 07:50
Re: [ruby-changes:25810] kosaki:r37867 (trunk): * thread.c (rb_mutex_trylock, rb_mutex_unlock, mutex
on 2012-11-28 03:30
> Mutex#lock $B$H$+$r!$(Btrap handler $BCf$G=PMh$J$$!$$C$F$N$O!$$9$_$^$;$s!$$I$N(B > $BJU$NOC$G$7$?$C$1!%(B [ruby-dev:46434] $B$H$+$G5DO@$7$?$H$-$K!"EvJ,(B trap$B$+$i(Bmutex$B$,;H$($J$$@)8B$OD>$5$J$$$H$$$&$3$H$@$C$?$N$G!"%a!<%8E*$KNc30Ej$2$k$h$&$K$7$^$7$?(B > ruby-spec $B$,$3$l$GMn$A$F$$$k$N$G5$$,$D$-$^$7$?!%(B > $B$9$_$^$;$s!$$3$l$C$F$=$&$$$&$b$N$G$7$?$C$1!%(B > $B$A$g$C$H!$Bg$-$9$.$k$h$&$K;W$$$^$7$F!%(B $B4X78$"$k$+$I$&$+$o$+$j$^$;$s$,!"$5$5$@$5$s$,(Birc$B$G(Btry_lock$B$GMn$A$?$HH/8@$7$?%m%0$,;D$C$F$$$?$N$G(B try_lock$B$@$1Nc30=P$5$J$$$h$&$KJQ$($^$7$?!#(B try_lock$B$O(Bdeadlock$B$7$J$$$N$G!#(B > (a) trap $BFb$G407k$9$k(B lock $B$O$A$c$s$HF0$/(B > $B!J(Btrap $BFb$G(B unlock $B$7$J$$E[$O;`$M$P$$$$!K(B > > (b) sub-thread $B$G(B lock $B$7$F$$$kE[$O!$(Btrap $BFb$GBT$D$3$H$,$G$-$k(B > > $B$H=PMh$k$H;W$$$^$9!%$$$+$,$G$7$g$&$+!%(B $B#2$D$NM}M3$+$i9%$-$G$O$"$j$^$;$s!#(B1) mutex$B$,(Block owner$B$rJ];}$7$F$$$k$N$,5DO@$NA0Ds$K$J$C$F$$$k$,!"(Bdeadlock detection$B$,$J$$<BAu$G$O$J$$$G$O$?$V$sJ];}$7$F$$$J$$$G$"$m$&(B $B#2!K$=$l$G$O%@%a$J%W%m%0%i%`$r=q$$$?;~$K!"%F%9%H$GDL$C$FK\HV$GMn$A$k$H$$$&:G0-$N7k2L$K$J$C$F$7$^$$!"(Bdeadlock$B$+$i$?$$$7$F9%E>$7$F$$$J$$(B $B;d$N9M$($@$HNc30$O%W%m%0%i%`$,4V0c$C$F$$$k$H65$($F>e$2$k$?$a$K$"$2$F$$$k$N$G!"%F%9%H$7$?;~$K$&$C$+$jDL$C$F$7$^$&$h$&$J>r7o$O$"$^$j9%$-$G$O$J$/!"0lHLE*$K$O%l!<%9$7$F$=$&$J$iNc30$H$$$&>r7o$b$"$^$j9%$-$G$O$"$j$^$;$s!#(B $B$I$&$;!"(Bdeadlock$B$9$k@)8B$,$O$:$l$?$iNc30>e$,$i$J$/$9$k$D$b$j$@$C$?$N$G!"$3$NJQ99A4BN$r(Brevert$B$9$k$N$b$"$j$G$9$,!"$=$b$=$b(Bdeadlock$B$7$F$&$l$7$$?M$O$$$k$s$G$9$+$M(B > $B$A$J$_$K!$(BPOSIX thread $B$O$I$&$J$C$F$k$s$G$7$?$C$1!%(B trylock$B$b4^$a!"$9$Y$F(Bsignal$B%O%s%I%i$G;H$&$HF0:n$9$kJ]>Z$O$"$j$^$;$s(B
Re: [ruby-changes:25810] kosaki:r37867 (trunk): * thread.c (rb_mutex_trylock, rb_mutex_unlock, mutex
on 2012-11-28 04:23
$B$I$b$I$b!%(B (2012/11/28 11:29), KOSAKI Motohiro wrote: >> Mutex#lock $B$H$+$r!$(Btrap handler $BCf$G=PMh$J$$!$$C$F$N$O!$$9$_$^$;$s!$$I$N(B >> $BJU$NOC$G$7$?$C$1!%(B > > [ruby-dev:46434] $B$H$+$G5DO@$7$?$H$-$K!"EvJ,(B > trap$B$+$i(Bmutex$B$,;H$($J$$@)8B$OD>$5$J$$$H$$$&$3$H$@$C$?$N$G!"%a!<%8E*$KNc30Ej$2$k$h$&$K$7$^$7$?(B $B!!!V(B2.0 $B$G$O(B trap $B$G(B main $B$,%m%C%/$7$F$$$k$H$-$K$b$&0lEY(B lock $B$r<h$m$&$H(B $B$9$k$H%G%C%I%m%C%/$9$k$N$OD>$5$J$$!W$G$9$h$M!%(B $B!!$J$N$G!$:#2s$NDs0F$O!V(Bmain $B$,%m%C%/$7$F$$$k$H$-!W$H$$$&>r7o$rIU$1$h$&(B $B$H$$$&OC$H$J$C$F$$$^$9!%(B >> ruby-spec $B$,$3$l$GMn$A$F$$$k$N$G5$$,$D$-$^$7$?!%(B >> $B$9$_$^$;$s!$$3$l$C$F$=$&$$$&$b$N$G$7$?$C$1!%(B >> $B$A$g$C$H!$Bg$-$9$.$k$h$&$K;W$$$^$7$F!%(B > > $B4X78$"$k$+$I$&$+$o$+$j$^$;$s$,!"$5$5$@$5$s$,(Birc$B$G(Btry_lock$B$GMn$A$?$HH/8@$7$?%m%0$,;D$C$F$$$?$N$G(B try_lock$B$@$1Nc30=P$5$J$$$h$&$KJQ$($^$7$?!#(B > try_lock$B$O(Bdeadlock$B$7$J$$$N$G!#(B $B!!$=$&$G$9$M!%(B >> (a) trap $BFb$G407k$9$k(B lock $B$O$A$c$s$HF0$/(B >> $B!J(Btrap $BFb$G(B unlock $B$7$J$$E[$O;`$M$P$$$$!K(B >> >> (b) sub-thread $B$G(B lock $B$7$F$$$kE[$O!$(Btrap $BFb$GBT$D$3$H$,$G$-$k(B >> >> $B$H=PMh$k$H;W$$$^$9!%$$$+$,$G$7$g$&$+!%(B > > $B#2$D$NM}M3$+$i9%$-$G$O$"$j$^$;$s!#(B1) mutex$B$,(Block owner$B$rJ];}$7$F$$$k$N$,5DO@$NA0Ds$K$J$C$F$$$k$,!"(Bdeadlock > detection$B$,$J$$<BAu$G$O$J$$$G$O$?$V$sJ];}$7$F$$$J$$$G$"$m$&(B $B!!B>$N<BAu$O!$Nc$($P(B trap $BCf$G(B main $B$H6%9g$7$J$$2DG=@-$,$"$k$N$G!$9M$($J(B $B$/$F$bNI$$$H;W$$$^$9!%(BCRuby 2.0.0 $B$N@)8B$H$$$&0LCV$E$1$G$9$+$i!%(B > $B#2!K$=$l$G$O%@%a$J%W%m%0%i%`$r=q$$$?;~$K!"%F%9%H$GDL$C$FK\HV$GMn$A$k$H$$$&:G0-$N7k2L$K$J$C$F$7$^$$!"(Bdeadlock$B$+$i$?$$$7$F9%E>$7$F$$$J$$(B > > $B;d$N9M$($@$HNc30$O%W%m%0%i%`$,4V0c$C$F$$$k$H65$($F>e$2$k$?$a$K$"$2$F$$$k$N$G!"%F%9%H$7$?;~$K$&$C$+$jDL$C$F$7$^$&$h$&$J>r7o$O$"$^$j9%$-$G$O$J$/!"0lHLE*$K$O%l!<%9$7$F$=$&$J$iNc30$H$$$&>r7o$b$"$^$j9%$-$G$O$"$j$^$;$s!#(B $B!!$^$:$$;H$$J}$r$9$k$H;~!9DL$j!$;~!9:$$k$N$GA4It<:GT$H$5$;$F$7$^$*$&!$$H(B $B$$$&9M$(J}$OM}2r=PMh$^$9!%!!(B $B!V(BMutex $B$@$H%?%$%_%s%0$NLdBj$G$?$^$?$^(B main $B$H(B trap $B$G%F%9%H$NCJ3,$G6%9g(B $B$,H/@8$7$J$$$3$H$,$"$k$N$G!$$3$NJQ99$GA4It6X;_$K$7$F$7$^$*$&!W$H$$$&$3$H(B $B$G!$%F%9%H;~$K$O:F8=$7$J$$$,!$=P2Y8e$K8+$D$+$k%P%0$,Kd$a9~$^$l$k2DG=@-$,(B $B$"$k!$$H$$$&$3$H$G$9$M!%$3$l$rGS=|$9$kJ}8~$ONI$$$H;W$$$^$9!%(B $B!!$?$@!$(Bmain $B$H(B trap $B$,6%9g$7$J$$!$$H$$$&$3$H$rMxMQ<T$,Cm0U$7$F$$$k>u67(B $B$G$b!$0l@ZMxMQ$G$-$J$$!$$H$$$&JQ99$J$N$G!$m4m0$7$F$$$^$9!%B?J,!$4{B8$N%9(B $B%/%j%W%H$K7k9=$"$j$=$&$8$c$J$$$+$H!%(B $B!!7Y9p$r=P$9!$$H$9$k$HCfESH>C<$GC/$b5_$($J$$$+$J$!!%$&!<$s!%Bg$-$JJQ99$J(B $B$N$G!$$^$:$O7Y9p$r=P$9$h$&$K$9$k!$$H$$$&J}?K$O!$$=$l$O$=$l$G$"$j$J5$$b$7(B $B$^$9$,!%(B $B!!$A$g$C$H$^$H$^$j$^$;$s$,!$$H$j$"$($:Aw$C$F$*$-$^$9!%(B >> $B$A$J$_$K!$(BPOSIX thread $B$O$I$&$J$C$F$k$s$G$7$?$C$1!%(B > > trylock$B$b4^$a!"$9$Y$F(Bsignal$B%O%s%I%i$G;H$&$HF0:n$9$kJ]>Z$O$"$j$^$;$s(B $B!!$J$k$[$I!$$=$&$G$7$?!%(B
Re: [ruby-changes:25810] kosaki:r37867 (trunk): * thread.c (rb_mutex_trylock, rb_mutex_unlock, mutex
on 2012-11-28 15:28
mutex$B$NLdBj$O(Bmain thread$B$G(Btrap$B$,5/F0$9$k2DG=@-$N$"$k=j$G;H$C$F$J$1$l$PNI$$$@$1$J$N$G!"(Btrap$BFb$G0lN'6X;_$9$k$N$O!"Bg$2$5$@$H;W$$$^$9!#(B $BNc$($P(Btrap$B$r6X;_$7$F$+$i(Bmutex$B<h$k$H$+?'!9J}K!$O$"$k$o$1$G!#(B $B;H$$J}$r4V0c$($?$i(Bdeadlock$B$G;_$^$k$N$O(Bthread$B4V$N$d$j<h$j$G$bF1$8!#(B 2012$BG/(B11$B7n(B28$BF|(B 12:22 SASADA Koichi <ko1@atdot.net>:
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.