[#6728] Ruby 1.3.3-990507 — matz <matz@...>

Ruby 1.3.3-990507 is out, check out:

34 messages 1999/05/07
[#6731] Re: Ruby 1.3.3-990507 — Katsuyuki Komatsu <komatsu@...> 1999/05/07

小松です。

[#6779] Re: private inner class (Re: Re: class def in class def) — Koji Oda <oda@...1.qnes.nec.co.jp>

小田@QNES です。

13 messages 1999/05/13

[#6789] Ruby 1.3.3-990513 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.3-990513 is out, check out:

59 messages 1999/05/13
[#6811] Re: Ruby 1.3.3-990513 — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/05/14

小田@QNES です。

[#6814] Re: Ruby 1.3.3-990513 — matz@... (Yukihiro Matsumoto) 1999/05/15

まつもと ゆきひろです

[#6821] Re: Ruby 1.3.3-990513 — Koji Oda <oda@...1.qnes.nec.co.jp> 1999/05/16

小田@QNES です。

[#6790] Re: Ruby 1.3.3-990513 — Katsuyuki Komatsu <komatsu@...> 1999/05/13

小松です。

[#6891] Ruby 1.3.3-990518 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.3-990518 is out, check out:

19 messages 1999/05/18

[#6919] ext/socket/getaddrinfo.c tiny fix — Jun-ichiro itojun Hagino <itojun@...>

ext/socket/getaddrinfo.cに以下のpatchをおねがいします。

22 messages 1999/05/20
[#6921] Re: ext/socket/getaddrinfo.c tiny fix — Jun-ichiro itojun Hagino <itojun@...> 1999/05/20

[#7034] Ruby 1.3.4-990531 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990531 is out, check out:

25 messages 1999/05/31

[ruby-dev:7003] Re: IOError in threading

From: Masaki Fukushima <fukusima@...>
Date: 1999-05-27 06:11:11 UTC
List: ruby-dev #7003
福嶋です。

matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
> |以下のスクリプトを実行させるとIOErrorが発生しますが、その例外を捕
> |捉できません。
> 
> たまたま昨日見付けた以下のバグと関係ありそうです.

確かに直りました。

ところで、今度は以下のようなスクリプトで問題があります。

###########################
Thread.abort_on_exception = false
io = $stdin

Thread.start {
  begin
    sleep 1
    p 'closing...'
    io.close
  rescue IOError
    p 'thread rescue'
    p $!
  ensure
    p 'thread ensure'
  end
}
begin
  io.gets
rescue IOError
  p 'main rescue'
  p $!
ensure
  p 'main ensure'
end
###########################

2つ問題があります。

問題1
  Linuxのstraceで見ると、io.closeを呼んでも、closeシステムコール
  が呼ばれない。

問題2
  io.closeを呼ぶと、両方のensureが実行されて、両方のスレッドが終
  了したように見えるのですが、インタプリタが終了しません。これは
  問題1でcloseされていないファイルディスクリプタを延々とselectし
  ているからのようです。

問題1はrb_io_fptr_closeで、rb_thread_fd_closeの呼び出しから戻
らないのが原因のようです。

問題2だけなら以下のようにすると回避できました。

--- eval.c.orig	Thu May 27 13:25:27 1999
+++ eval.c	Thu May 27 13:23:16 1999
@@ -6191,6 +6191,10 @@
 	    th_raise_argv[0] = rb_exc_new2(rb_eIOError, "stream closed");
 	    th_raise_file = ruby_sourcefile;
 	    th_raise_line = ruby_sourceline;
+	    th->status = THREAD_RUNNABLE;
+	    th->fd = 0;
+	    th->wait_for &= ~WAIT_FD;
+	    num_waiting_on_fd--;
 	    curr_thread = th;
 	    rb_thread_restore_context(curr_thread, RESTORE_RAISE);
 	}

---
福嶋正機

In This Thread