# \[Bug #1848\] Net::SSH hangs

**URL:** <https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008>\
**Category:** Development\
**Created:** [July 31, 2009, 9:01am UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008 "2009-07-31T09:01:03Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [July 31, 2009, 9:01am UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/1 "2009-07-31T09:01:03Z")

</div>

Bug #1848: Net::SSH hangs  
[http://redmine.ruby-lang.org/issues/show/1848](http://redmine.ruby-lang.org/issues/show/1848)

e$B5/I\<\<Te(B: Shyouhei U.  
e$B%9%F!\<%?%9e(B: Open, e$BM%@hEYe(B: Normal  
e$B%+%F%4%je(B: core, Target version: Ruby 1.8.7  
ruby -v: 1.8.7-p135 and later

Revision r21165  
e$B0J9\_!“e(BNet::SSHe$B$r;H$&\>l9ge(B(e$B6qBNE\*$K$$$&$He(BCapistrano)e$B$G!”%9%l%C%I@Z$jBX$($,$&$^$/$$$+$J$$$H$$$&Js9p$r\<u$1$^$7$?e(B

# e$B$^$?J9$-$G$b$&$7$o$1$J$$e(B

[https://capistrano.lighthouseapp.com/projects/8716/tickets/79](https://capistrano.lighthouseapp.com/projects/8716/tickets/79)  
e$B$3$N$X$s$,4X78$7$F$$$k$+$b!#$7$F$J$$$+$b!#e(B

e$B:F8=J}K!e(B

[“localhost”,“localhost”].map {|h| Thread.new{Net::SSH.start(h,  
“foo”)}}.each {|t| t.join}

proposed patch against 1.8.7

— eval.c (revision 24335)  
+++ eval.c (working copy)  
@@ -11228,7 +11228,7 @@  
break;  
}  
if ((th-\>status == THREAD\_RUNNABLE || th == th\_found) &&  
th-\>stk\_ptr) {

- 

```
      if (!next || next->priority < th->priority) {

```

- 

```
      if (!next || next->priority <= th->priority) {
               th_found->status = THREAD_RUNNABLE;
               th_found->wait_for = 0;

```

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [July 31, 2009, 11:57am UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/2 "2009-07-31T11:57:52Z")

</div>

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

e$B$3$l!“F1$82U=j$G;I$5$C$F:$$C$F$$$?$N$G$9$,!”$3$N%Q%C%A$G2r7h$7$^$7$?!#e(B  
ruby\_1\_8e$B%V%i%s%A$G$9!#e(Bruby\_1\_8\_7e$B%V%i%s%A$OL$3NG’!#e(B

$ cap deploy

- executing `deploy’
- executing “_**"  
servers: ["server1.**_”, “server2.\*\*\*\*\*”]  
(e$B$3$3$G;I$5$ke(B)

On Fri, 31 Jul 2009 16:00:27 +0900  
In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
[[ruby-dev:38971] [Bug #1848] Net::SSH hangs]

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [August 3, 2009, 9:40am UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/3 "2009-08-03T09:40:30Z")

</div>

e$B%A%1%C%He(B #1848 e$B$,99?7$5$l$^$7$?!#e(B (by Shyouhei U.)

## e$B%Q%C%A$"$F$F$\_$^$7$?$,e(Btest/test\_timeout.rbe$B$,%O%s%0$9$k$h$&$K$J$j$^$9$M!#e(B e$B$=$3$^$G%7%s%W%k$JOC$G$b$J$5$=$&!#e(B

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

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [August 4, 2009, 4:05am UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/4 "2009-08-04T04:05:03Z")

</div>

Shyouhei U. e$B$5$s$O=q$-$^$7$?e(B:

> e$B%Q%C%A$"$F$F$\_$^$7$?$,e(Btest/test\_timeout.rbe$B$,%O%s%0$9$k$h$&$K$J$j$^$9$M!#e(B  
> e$B$=$3$^$G%7%s%W%k$JOC$G$b$J$5$=$&!#e(B

e$B$h$/$o$+$C$F$J$$$^$^;n9T:x8m$r7+$jJV$9$N$be(B  
e$B$I$&$+$H$O;W$C$?$N$G$9$,!"e(B  
e$B$?$H$($P$3$s$J46$8$@$He(Btest\_timeout.rbe$B$ODL$k$h$&$G$9!#e(B

# Index: eval.c

— eval.c (revision 24384)  
+++ eval.c (working copy)  
@@ -11378,7 +11378,7 @@  
break;  
}  
if ((th-\>status == THREAD\_RUNNABLE || th == th\_found) &&  
th-\>stk\_ptr) {

- 

```
      if (!next || next->priority < th->priority) {

```

- 

```
      if (!next || next->priority < th->priority || th == th_found 

```

&& next-\>priority == th-\>priority) {  
if (th == th\_found) {  
th\_found-\>status = THREAD\_RUNNABLE;  
th\_found-\>wait\_for = 0;

# 

e$B:#2s$Oe(Btest/runner.rbe$B$r\<B9T$7$F!"%Q%C%A$"$j!&$J$7$G0c$$$,$G$J$$$H$3$m$^$G$O3NG’$7$^$7$?!#e(B

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [August 5, 2009, 6:34pm UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/5 "2009-08-05T18:34:21Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
akira yamada / e$B$d$^$@$"$-$ie(B [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$h$/$o$+$C$F$J$$$^$^;n9T:x8m$r7+$jJV$9$N$be(B  
> e$B$I$&$+$H$O;W$C$?$N$G$9$,!"e(B  
> e$B$?$H$($P$3$s$J46$8$@$He(Btest\_timeout.rbe$B$ODL$k$h$&$G$9!#e(B

th\_found e$B$K$O!“e(Bth\_found e$B$re(B runnable e$B$K$7$?$H$-$OI,$:e(B  
th\_found e$B$r\<!$KF0$+$9%9%l%C%I$H$7$FA\*$V$H$$$&0U?^$,$”$j$^$9!#e(B  
(e$B5U$K$$$($P!“e(BI/O e$BBT$A$J%9%l%C%I$N$&$A!”\<!$KF0$+$9%9%l%C%I$He(B  
e$B$7$FA\*$P$J$$$b$N$Oe(B runnable e$B$K$O$7$J$$$H$$$&$3$H$G$9e(B)

e$BM}M3$Oe(B [ruby-core:20446]  
e$B$G$9$,!"$J$s$+$&$^$/$J$$$h$&$G$9$M!#e(B

Net::SSH e$B$NLdBj$O\<j85$G$O:F8=$7$J$$$N$G!"$3$NLdBj$N\>u67$O$he(B  
e$B$/$o$+$j$^$;$s!#e(B

% ./ruby -v -I/home/ruby/net-ssh/net-ssh-2.0.11/lib -rnet/ssh -e  
‘[“localhost”,“localhost”].map {|h| Thread.new{Net::SSH.start(h,  
“foo”)}}.each {|t| t.join}’  
ruby 1.8.8dev (2009-08-05 revision 24403) [i686-linux]  
/home/ruby/net-ssh/net-ssh-2.0.11/lib/net/ssh/ruby\_compat.rb:3: warning:  
method redefined; discarding old getbyte  
/home/ruby/net-ssh/net-ssh-2.0.11/lib/net/ssh.rb:192:in `start': foo (Net::SSH::AuthenticationFailed) from -e:1:in `join’  
from -e:1  
from -e:1:in `each’  
from -e:1

e$B$G$b!"%3!\<%I$r$_$J$\*$7$?$i$J$s$+JQ$J$H$3$m$r8+$D$1$?$N$G$A$g$Ce(B  
e$B$HD\>$7$F$_$^$7$?!#$=$l$,$3$NLdBj$rD\>$9$+$I$&$+$O$o$+$j$^$;$s!#e(B

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [August 7, 2009, 4:47pm UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/6 "2009-08-07T16:47:37Z")

</div>

e$B%A%1%C%He(B #1848 e$B$,99?7$5$l$^$7$?!#e(B (by Akira T.)

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 r24442.

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

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [August 7, 2009, 4:48pm UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/7 "2009-08-07T16:48:12Z")

</div>

2009/8/7 akira yamada / e$B$d$^$@$"$-$ie(B [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B0J2\<$G!"$\*$=$i$/F1$8$H;W$o$l$k8=\>]$,5/$-$^$9!#e(B  
> e$B\<j85$G$O\<B9T$4$H$KKh2sH/@8$7$F$$$^$9$,!"e(B  
> e$B$b$7$+$9$k$H2?EY$+\<B9T$9$k$H!A$+$b$7$l$^$;$s!#e(B

e$B$9$P$i$7$$!#:F8=$7$^$7$?!#e(B

e$BD\>$;$?$h$&$K;W$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [August 7, 2009, 3:03am UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/8 "2009-08-07T03:03:30Z")

</div>

Tanaka A. e$B$5$s$O=q$-$^$7$?e(B:

> Net::SSH e$B$NLdBj$O\<j85$G$O:F8=$7$J$$$N$G!"$3$NLdBj$N\>u67$O$he(B  
> e$B$/$o$+$j$^$;$s!#e(B

e$B0J2\<$G!"$\*$=$i$/F1$8$H;W$o$l$k8=\>]$,5/$-$^$9!#e(B  
e$B\<j85$G$O\<B9T$4$H$KKh2sH/@8$7$F$$$^$9$,!"e(B  
e$B$b$7$+$9$k$H2?EY$+\<B9T$9$k$H!A$+$b$7$l$^$;$s!#e(B

* * *

th = []

2.times do  
th \<\< Thread.new do  
open("/dev/zero") do |i|  
loop do  
r, = IO.select([i], [], [], 0)  
if r  
p i.read(1)  
break  
end  
end  
end  
end  
end

## th.each {|t| t.join }

e$B;29M$K$J$k$+$I$&$+$o$+$j$^$;$s$,e(Bdebug  
printe$B$rF~$l$F$\_$^$7$?!#e(B  
e$B@hF,$,9THV9f$G$9!#e(B

11249 /\* Do the select if needed _/  
11250 fprintf(stderr,"%4d) need\_select=%d\n", **LINE** ,need\_select);  
if (need\_select) {  
11251 /_ Convert delay to a timeval \*/  
…  
11267 n = select(max+1, &readfds, &writefds, &exceptfds,  
delay\_ptr);  
11268 fprintf(stderr,"%4d) n=%d\n", **LINE** ,n); if (n \< 0) {  
11269 int e = errno;  
…  
11361 th\_found = th;  
11362 fprintf(stderr,"%4d) th\_found=%d\n", **LINE** ,th);  
found = 1;  
11363 break;  
…  
11369 th\_found = th;  
11370 fprintf(stderr,"%4d) th\_found=%d\n", **LINE** ,th);  
found = 1;  
11371 break;  
…  
11386 }  
11387 fprintf(stderr,"%4d) th=%d th\_found=%d\n", **LINE** ,th,th\_found);  
if ((th-\>status == THREAD\_RUNNABLE || th == th\_found) && th-\>stk\_ptr) {  
11388 if (!next || next-\>priority \< th-\>priority) {  
11389 fprintf(stderr,"%4d) next=th\n", **LINE** ); next = th;  
11390 }

e$B\<B9T7k2L$O$3$s$J46$8$K$J$j$^$9!#e(B  
(e$B;HMQ$7$?$N$Oe(Bruby 1.8.8dev (2009-08-06 revision 24416)  
[i686-linux]e$B$G$9e(B)

1. need\_select=1
2. n=1
3. th\_found=142481000
4. th=142326496 th\_found=142481000
5. next=th
6. th=142481000 th\_found=142481000
7. need\_select=1
8. n=1
9. th\_found=142490464
10. th=142481000 th\_found=142490464
11. next=th
12. th=142326496 th\_found=142490464
13. th=142490464 th\_found=142490464
14. need\_select=1
15. n=1
16. th\_found=142481000
17. th=142326496 th\_found=142481000
18. next=th
19. th=142490464 th\_found=142481000
20. th=142481000 th\_found=142481000  
…

1.8.7-p35e$B$G$b8=\>]$,H/@8$7$^$9!#e(B1.8.7-p{72,134}e$B$He(B1.9.0-p0e$B$G$O$9$0$K=\*N;$7$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Shyouhei\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/94ad74/32.png) [@Shyouhei\_U](https://www.ruby-forum.com/u/Shyouhei_U)\
**Post date:** [August 8, 2009, 11:52am UTC](https://www.ruby-forum.com/t/bug-1848-net-ssh-hangs/173008/9 "2009-08-08T11:52:08Z")

</div>

On 2009/08/07, at 23:47, Tanaka A. wrote:

> > e$B0J2\<$G!"$\*$=$i$/F1$8$H;W$o$l$k8=\>]$,5/$-$^$9!#e(B  
> > e$B\<j85$G$O\<B9T$4$H$KKh2sH/@8$7$F$$$^$9$,!"e(B  
> > e$B$b$7$+$9$k$H2?EY$+\<B9T$9$k$H!A$+$b$7$l$^$;$s!#e(B
> 
> e$B$9$P$i$7$$!#:F8=$7$^$7$?!#e(B
> 
> e$BD\>$;$?$h$&$K;W$$$^$9!#e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B  
e$B\<j85$G$bF0:n$,3NG’$G$-$^$7$?!#e(B
