[#954] Rational — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

23 messages 1996/10/30
[#955] Re: Rational — matz@... (Yukihiro Matsumoto) 1996/10/30

まつもと ゆきひろです.

[#968] Re: Rational 1996/10/31

けいじゅ@SHLジャパンです.

[ruby-list:828] Re: BOW thread(Re: mech. of Thread (Re: httpd.rb))

From: Shin-ichiro Hara <sinara@...>
Date: 1996-10-09 15:03:47 UTC
List: ruby-list #828
原です。

> thread_schedule()関数にprintfをいれてデバッグするしかないん
> でしょうけど….変数nextの値が0なのが原因なんですよねえ.ど
> うしよう.
> 
>                                 まつもと ゆきひろ /:|)


 eval.c にあっちこっち printf を入れて見たんですが、わかりませんでした。
どうも挙動不審です。

thread_schedule() の select の前後に

>   Counter++;
>   printf("%02d)BEFORE select: next = %d, n = %d\n", Counter, next, n);
                n = select(max+1, &readfds, NULL, NULL, delay_ptr);
>   printf("%02d)AFTER  select: next = %d, n = %d\n", Counter, next, n);

をいれ、問題の Fatal のあとに

    if (!next) {
        Fatal("Thread: deadlock");
    }
>    printf("NEXT\n");

として

------------------^ tsvr.rb
require "socket"
require "thread"

gs = TCPserver.open(0)
addr = gs.addr
addr.shift
$stderr.printf("server is on %d\n", addr.join(":"))

while TRUE
  ns = gs.accept
  $stderr.print(ns, " is accepted\n")
  Thread.start do
    s =	ns
    while TRUE
      sleep 1
    end
    $stderr.print(s, " is gone\n")
    s.close
  end
end
------------------$ tsvr.rb

を動かして、telnet でアクセスしたログです。

------------------^
pizzicato:~/ruby-0.99.2-961007# ./ruby tsvr.rb
server is on 2172
#<TCPsocket:0x9e1c4> is accepted
NEXT
01)BEFORE select: next = 488192, n = 10858100
01)AFTER  select: next = 488192, n = 0
NEXT
02)BEFORE select: next = 0, n = 10855648
03)BEFORE select: next = 0, n = 48
03)AFTER  select: next = 0, n = 0
04)BEFORE select: next = 488192, n = 0
04)AFTER  select: next = 488192, n = 0
NEXT
04)AFTER  select: next = 0, n = -1
05)BEFORE select: next = 0, n = -1
06)BEFORE select: next = 488192, n = 0
06)AFTER  select: next = 488192, n = 0
NEXT
06)AFTER  select: next = 0, n = -1
07)BEFORE select: next = 487680, n = -4
07)AFTER  select: next = 487680, n = 0
NEXT
tsvr.rb:16:in `sleep': Thread: deadlock
------------------$

なんで select の前後で突然ジャンプするのだろう?(^^;


                           Shin-ichro Hara(Nagaoka Univ.of Tech.)

In This Thread

Prev Next