# \[Bug:1.9\] Rinda has a race condition

**URL:** <https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001>\
**Category:** Development\
**Created:** [July 24, 2008, 3:28pm UTC](https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001 "2008-07-24T15:28:32Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [July 24, 2008, 3:28pm UTC](https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001/1 "2008-07-24T15:28:32Z")

</div>

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

e$B8=:\_e(B make test-all e$B$Ge(B Rinda  
e$B$N%F%9%H$OL58z2=$5$l$F$$$^$9!#e(B

1. Failure:  
test\_message(Rinda::TupleSpaceTest)  
[/home/mame/work/ruby19/ruby/test/rinda/test\_rinda.rb:497]:  
YARV doesn’t support Rinda.

e$B!VM-8z2=$9$k$He(B Rinda  
e$B$N%F%9%H$G8G$^$k$+$i!W$H$5$5$@$5$s$KJ9$-$^$7$?!#e(B  
e$B$3$NLdBj$Oe(B YARV  
e$B$,%^!\<%8$5$l$?;~$+$i!"$:$C$HJ|CV$5$l$F$$$^$9!#e(B

e$BD4$Y$F$$$F5$$E$$$?$N$G$9$,!"0J2\<$N$h$&$Ke(B Rinda  
e$B$KCY1d$rH/@8$5$;$k$He(B

# Index: lib/rinda/tuplespace.rb

— lib/rinda/tuplespace.rb (revision 18194)  
+++ lib/rinda/tuplespace.rb (working copy)  
@@ -570,6 +570,7 @@  
keep\_clean  
sleep(@period)  
end

- 

```
   sleep 3
 end

```

end

e$B0J2\<$Ge(B deadlock detected e$B$K$J$j$^$9!#e(B1.8  
e$B$G$bF1MM$G$9!#e(B

$ ./ruby -rrinda/tuplespace -e ’  
ts = Rinda::TupleSpace.new(1)  
ts.take([:foo, :bar], 1) rescue nil  
sleep 2  
ts.take([:foo, :bar], 1)  
’  
/home/mame/work/ruby19/local/lib/ruby/1.9.0/thread.rb:68:in `sleep': deadlock detected (fatal) from /home/mame/work/ruby19/local/lib/ruby/1.9.0/thread.rb:68:in`wait’  
from  
/home/mame/work/ruby19/local/lib/ruby/1.9.0/monitor.rb:97:in `wait' from /home/mame/work/ruby19/local/lib/ruby/1.9.0/rinda/tuplespace.rb:198:in`wait’  
from  
/home/mame/work/ruby19/local/lib/ruby/1.9.0/rinda/tuplespace.rb:465:in  
`block in move' from /home/mame/work/ruby19/local/lib/ruby/1.9.0/monitor.rb:190:in`mon\_synchronize’  
from  
/home/mame/work/ruby19/local/lib/ruby/1.9.0/rinda/tuplespace.rb:443:in  
`move' from /home/mame/work/ruby19/local/lib/ruby/1.9.0/rinda/tuplespace.rb:433:in`take’  
from -e:5:in `’

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [July 25, 2008, 9:21pm UTC](https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001/2 "2008-07-25T21:21:30Z")

</div>

e$B31$H$$$$$^$9!#e(B

1.8e$B7O$Ne(Btuplespace.rbe$B$r=$@5$7$?3P$($,$"$k$N$G$9$,!"e(B  
1.8e$B7O$G$b$d$C$Q$j$@$a$G$7$g$&$+!)e(B

e$B$I$A$i$K$;$h!"e(B1.8e$B$Ne(Btuplespace.rbe$B$re(B1.9e$B$Xe(B  
cie$B$7$h$&$H;W$$$^$9$N$G!“e(B  
e$B$h$+$C$?$i$”$H$G$b$&0lEY$?$a$7$F$b$i$($^$9$+!)e(B  
#e$B$$$^%S%k%ICf$J$N$G$7$P$i$/BT$C$F$/$@$5$$e(B

On 2008/07/24, at 22:22, Yusuke ENDOH wrote:

> @@ -570,6 +570,7 @@  
> keep\_clean  
> sleep(@period)  
> end
> 
> - 
> 
> ```
> sleep 3
> end
> 
> ```
> 
> end
> 
> e$B0J2\<$Ge(B deadlock detected e$B$K$J$j$^$9!#e(B1.8 e$B$G$bF1e(B  
> e$BMM$G$9!#e(B

e$B;w$?$h$&$J$H$3$m$GCY1d$5$;$?$s$G$9$,!"$3$s$J46$8$G$9!#e(B

# Index: lib/rinda/tuplespace.rb

— lib/rinda/tuplespace.rb (revision 18222)  
+++ lib/rinda/tuplespace.rb (working copy)  
@@ -622,6 +622,7 @@  
break unless need\_keeper?  
keep\_clean  
end  
+sleep(3)  
end  
end  
end

$ ./ruby -rrinda/tuplespace -e ’  
ts = Rinda::TupleSpace.new(1)  
ts.take([:foo, :bar], 1) rescue nil  
sleep 2  
ts.take([:foo, :bar], 1)  
’  
/usr/local/lib/ruby/1.8/rinda/tuplespace.rb:503:in `move': Rinda::RequestExpiredError (Rinda::RequestExpiredError) from /usr/local/lib/ruby/1.8/monitor.rb:242:in`synchronize’  
from /usr/local/lib/ruby/1.8/rinda/tuplespace.rb:488:in `move' from /usr/local/lib/ruby/1.8/rinda/tuplespace.rb:479:in`take’  
from -e:5

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [July 27, 2008, 3:35pm UTC](https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001/3 "2008-07-27T15:35:04Z")

</div>

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

2008/07/26 4:15 Masatoshi SEKI [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> 1.8e$B7O$Ne(Btuplespace.rbe$B$r=$@5$7$?3P$($,$"$k$N$G$9$,!"e(B  
> 1.8e$B7O$G$b$d$C$Q$j$@$a$G$7$g$&$+!)e(B

e$B$9$\_$^$;$s!"e(B1.8.5 e$B$H$+$9$4$/8E$$e(B 1.8 e$B$r8+$F$$$^$7$?!#e(B

> e$B$I$A$i$K$;$h!"e(B1.8e$B$Ne(Btuplespace.rbe$B$re(B1.9e$B$Xe(Bcie$B$7$h$&$H;W$$$^$9$N$G!“e(B  
> e$B$h$+$C$?$i$”$H$G$b$&0lEY$?$a$7$F$b$i$($^$9$+!)e(B  
> #e$B$$$^%S%k%ICf$J$N$G$7$P$i$/BT$C$F$/$@$5$$e(B

e$B3NG’$7$^$7$?!#e(B  
make test-all TESTS=rinda e$B$G$Oe(B 0F0E e$B$G$7$?$,!"e(Bmake test-all  
e$B$@$He(B  
2 e$B$De(B Failure e$B$,=P$^$7$?!#e(B

1. Failure:  
test\_core\_03\_notify(Rinda::TupleSpaceProxyTest)  
[/home/mame/work/ruby19/ruby/test/rinda/test\_rinda.rb:397]:  
\<[0, 3]\> expected but was  
\<[1, 2]\>.

2. Failure:  
test\_has\_expires\_eh(TestTupleBag)  
[/home/mame/work/ruby19/ruby/test/rinda/test\_tuplebag.rb:137]:  
 expected but was  
.

e$B$^$?!"$3$Ne(B start\_keeper e$B$@$He(B keeper  
e$B$,;`$J$J$$$H;W$&$N$G$9$,!"e(B  
e$B$=$l$O$A$g$C$H$^$:$/$J$$$G$7$g$&$+!#e(B

$ ./ruby -e ’  
at\_exit { sleep 5; p Thread.list }  
require “test/rinda/test\_rinda.rb”  
’

Loaded suite -e  
Started  
…  
Finished in 1.050015839 seconds.

25 tests, 292 assertions, 0 failures, 0 errors  
[#\<Thread:0x819f2f0 run\>, #\<Thread:0x838f1a0 sleep\>,  
#\<Thread:0x8389dcc sleep\>, #\<Thread:0x83a2db8 sleep\>,  
#\<Thread:0x839d520 sleep\>, #\<Thread:0x83919a0 sleep\>,  
#\<Thread:0x832dd9c sleep\>, #\<Thread:0x826e67c sleep\>,  
#\<Thread:0x83888f0 sleep\>, #\<Thread:0x825ebb4 sleep\>,  
#\<Thread:0x825ccd8 sleep\>, #\<Thread:0x849d038 sleep\>,  
#\<Thread:0x82f3214 sleep\>, #\<Thread:0x8311ac0 sleep\>,  
#\<Thread:0x845f328 sleep\>, #\<Thread:0x84be5bc sleep\>,  
#\<Thread:0x847b938 sleep\>, #\<Thread:0x84265a0 sleep\>,  
#\<Thread:0x824f7b8 sleep\>, #\<Thread:0x828cf00 sleep\>]

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [July 28, 2008, 9:11pm UTC](https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001/4 "2008-07-28T21:11:31Z")

</div>

e$B31$H$$$$$^$9!#e(B

On 2008/07/27, at 22:34, Yusuke ENDOH wrote:

> > e$B$I$A$i$K$;$h!"e(B1.8e$B$Ne(Btuplespace.rbe$B$re(B1.9e$B$Xe(B  
> > cie$B$7$h$&$H;W$$$^$9$N$G!“e(B  
> > e$B$h$+$C$?$i$”$H$G$b$&0lEY$?$a$7$F$b$i$($^$9$+!)e(B  
> > #e$B$$$^%S%k%ICf$J$N$G$7$P$i$/BT$C$F$/$@$5$$e(B
> 
> e$B3NG’$7$^$7$?!#e(B  
> make test-all TESTS=rinda e$B$G$Oe(B 0F0E e$B$G$7$?$,!"e(Bmake test-  
> all e$B$@$He(B  
> 2 e$B$De(B Failure e$B$,=P$^$7$?!#e(B

failuree$B$O$?$V$s%F%9%H$NLdBj$G$9!#e(B  
1.8e$B7O$G$bCY$$%^%7%s$G8=\>]$r3NG’$7$^$7$?!#e(B  
e$B$J$s$H$+$7$?$$$H;W$$$^$9!#e(B

> Loaded suite -e  
> #\<Thread:0x825ccd8 sleep\>, #\<Thread:0x849d038 sleep\>,  
> #\<Thread:0x82f3214 sleep\>, #\<Thread:0x8311ac0 sleep\>,  
> #\<Thread:0x845f328 sleep\>, #\<Thread:0x84be5bc sleep\>,  
> #\<Thread:0x847b938 sleep\>, #\<Thread:0x84265a0 sleep\>,  
> #\<Thread:0x824f7b8 sleep\>, #\<Thread:0x828cf00 sleep\>]

e$B$3$l$OLB$C$?$s$@$1$I!"$$$^$O$=$&$7$^$7$?!#e(B  
e$B\<B%"%W%j%1!\<%7%g%s$G$Oe(BTupleSpacee$B$r;H$$\<N$F$J$$$HA[Dj$7e(B  
e$B$?$+$i$G$9!#e(B

keepere$B$r$&$^$/@8@.$G$-$J$+$C$?$N$O;d$N%W%m%0%i%_%s%0G=NO$NLde(B  
e$BBj$G$9!#e(B  
e$B$b$&$A$g$C$H$,$s$P$C$F$_$^$9!#e(B

# e$B%?%W%k$4$H$Ke(BThreade$B$r@8@.$7$F$7$^$&$N$,0lHV4JC1$J$s$@$1$I!Ee(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [July 29, 2008, 2:29pm UTC](https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001/5 "2008-07-29T14:29:36Z")

</div>

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

2008/07/29 4:10 Masatoshi SEKI [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > e$B$^$?!"$3$Ne(B start\_keeper e$B$@$He(B keeper e$B$,;`$J$J$$$H;W$&$N$G$9$,!"e(B  
> > e$B$=$l$O$A$g$C$H$^$:$/$J$$$G$7$g$&$+!#e(B  
> > (snip)
> 
> e$B$3$l$OLB$C$?$s$@$1$I!“$$$^$O$=$&$7$^$7$?!#e(B  
> e$B\<B%”%W%j%1!\<%7%g%s$G$Oe(BTupleSpacee$B$r;H$$\<N$F$J$$$HA[Dj$7$?$+$i$G$9!#e(B

e$B$&!\<$s!“L/$K%9%l%C%I$,;D$k$N$OB\>$N%F%9%H$X$N1F6A$,$A$g$C$H?4G[$G$9!#e(B  
e$B:#$N$H$3$mBg\>fIW$\_$?$$$G$9$1$I!#$”$H$d$C$Q$j\>/$75$;}$A0-$$$G$9!#e(B

e$B$;$a$F!“e(Bkeeper e$B$rL@\<(E\*$K=\*$o$i$;$ke(B API  
e$B$rDs6!$9$k$N$O$I$&$G$7$g$&!#e(B  
e$B$b$A$m$se(B keeper  
e$B$,$&$^$/4IM}$G$-$l$P!”$=$l$,0lHV$$$$$H;W$$$^$9!#e(B

# Index: lib/rinda/tuplespace.rb

— lib/rinda/tuplespace.rb (revision 18257)  
+++ lib/rinda/tuplespace.rb (working copy)  
@@ -446,6 +446,16 @@  
end

```
 ##

```

- 
# Finalize this TupleSpace. After TupleSpace is finalized, it

should not

- 
# be used.
- def finalize

- 

```
 if @keeper && @keeper.alive?

```

- 

```
   @keeper.kill

```

- 

```
   @keeper.join

```

- 

```
 end

```

- end

- 
- 
## 

# Adds +tuple+

def write(tuple, sec=nil)  
Index: test/rinda/test\_rinda.rb  
===================================================================  
— test/rinda/test\_rinda.rb (revision 18257)  
+++ test/rinda/test\_rinda.rb (working copy)  
@@ -518,6 +518,10 @@  
ThreadGroup.new.add(Thread.current)  
@ts = Rinda::TupleSpace.new(1)  
end

- 
- def teardown

- @ts.finalize

- end  
end

class TupleSpaceProxyTest \< Test::Unit::TestCase  
@@ -529,6 +533,10 @@  
@ts = Rinda::TupleSpaceProxy.new(@ts\_base)  
end

- def teardown
- @ts\_base.finalize
- end
- def test\_remote\_array\_and\_hash  
@ts.write(DRbObject.new([1, 2, 3]))  
assert\_equal([1, 2, 3], @ts.take([1, 2, 3], 0))

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [August 1, 2008, 4:17pm UTC](https://www.ruby-forum.com/t/bug-1-9-rinda-has-a-race-condition/144001/6 "2008-08-01T16:17:10Z")

</div>

e$B%A%1%C%He(B #377 e$B$,99?7$5$l$^$7$?!#e(B (by Yukihiro M.)

e$B%9%F!\<%?%9e(B Opene$B$+$ie(BRejectede$B$KJQ99e(B

## #376e$B$H=EJ#e(B

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