[#12763] NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

24 messages 2001/04/04
[#12765] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/04

Yukihiro Matsumotoさんの

[#12767] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto) 2001/04/04

まつもと ゆきひろです

[#12787] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/06

Yukihiro Matsumotoさんの

[#12789] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto) 2001/04/06

まつもと ゆきひろです

[#12790] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/06

Yukihiro Matsumotoさんの

[#12792] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — matz@... (Yukihiro Matsumoto) 2001/04/06

まつもと ゆきひろです

[#12838] Re: NameError (Re: [ruby-list:29101] Re: nil.to_f) — "K.Kosako" <kosako@...> 2001/04/10

Yukihiro Matsumotoさんの

[#12795] recursive malloc / fork deadlock / thread deadlock — "Akinori MUSHA" <knu@...>

 添付のスクリプトで、いくつかのプラットフォームで問題が発生する

43 messages 2001/04/07
[#12799] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/07

まつもと ゆきひろです

[#12801] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/08

なかだです。

[#12802] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/09

まつもと ゆきひろです

[#12822] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/09

なかだです。

[#12827] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/09

まつもと ゆきひろです

[#12836] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/10

なかだです。

[#12840] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12852] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/10

なかだです。

[#12854] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12857] Re: recursive malloc / fork deadlock / thread deadlock — nobu.nakada@... 2001/04/10

なかだです。

[#12859] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12862] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/10

ごとうゆうぞうです。

[#12866] Re: recursive malloc / fork deadlock / thread deadlock — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12878] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/11

ごとうゆうぞうです。

[#12888] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/11

ごとうゆうぞうです。

[#12892] Re: recursive malloc / fork deadlock / thread deadlock — Takahiro Kambe <taca@...> 2001/04/12

完全に理解せずに書いています。

[#12895] Re: recursive malloc / fork deadlock / thread deadlock — Jun Adachi <adachi@...> 2001/04/12

安達@沖データと申します。

[#12898] Re: recursive malloc / fork deadlock / thread deadlock — GOTOU Yuuzou <gotoyuzo@...> 2001/04/12

ごとうゆうぞうです。

[#12830] 1.6.4 preview — "Akinori MUSHA" <knu@...>

 そろそろ FreeBSD 4.3-RELEASE 前の ports のフリーズが迫っている

23 messages 2001/04/09
[#12844] Re: 1.6.4 preview — matz@... (Yukihiro Matsumoto) 2001/04/10

まつもと ゆきひろです

[#12921] ObjectSpace.each_object(Symbol) — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

23 messages 2001/04/13
[#12923] Re: ObjectSpace.each_object(Symbol) — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#12928] Re: ObjectSpace.each_object(Symbol) — Hisayasu Nakao <h-nakao@...> 2001/04/13

中尾@富士通です。

[#12929] Re: ObjectSpace.each_object(Symbol) — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[#12934] Re: ObjectSpace.each_object(Symbol) — keiju@... (石塚圭樹) 2001/04/13

けいじゅ@日本ラショナルソフトウェアです.

[#12941] Re: ObjectSpace.each_object(Symbol) — matz@... (Yukihiro Matsumoto) 2001/04/13

まつもと ゆきひろです

[ruby-dev:13067] Re: patch for ext/gdbm

From: Koji Arai <JCA02266@...>
Date: 2001-04-30 15:42:43 UTC
List: ruby-dev #13067
新井です。

In message "[ruby-dev:13060] Re: patch for ext/gdbm"
  on 30 Apr 2001 02:17:54 +0900,
  Koji Arai <JCA02266@nifty.ne.jp> wrote:

> では、その方向で修正したパッチをつけます。

すみません。GDBM#delete_if はちょっと甘かったです。
追加パッチつけます。


--- gdbm.c.bak	Mon Apr 30 01:36:15 2001
+++ gdbm.c	Mon Apr 30 23:54:30 2001
@@ -409,8 +409,8 @@ fgdbm_delete_if(obj)
     struct dbmdata *dbmp;
     GDBM_FILE dbm;
     VALUE keystr, valstr;
-    VALUE ary = rb_ary_new();
-    int i;
+    VALUE ret, ary = rb_ary_new();
+    int i, status = 0;
 
     rb_secure(4);
     GetDBM(obj, dbmp);
@@ -423,13 +423,19 @@ fgdbm_delete_if(obj)
 
 	valstr = rb_gdbm_fetch2(dbm, keystr);
 
-	if (RTEST(rb_yield(rb_assoc_new(rb_str_dup(keystr), valstr)))) {
-            rb_ary_push(ary, keystr);
-	}
+        ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr),
+                         &status);
+        if (status != 0) {
+            dbmp->di_size -= 1;
+            goto delete;
+        }
+	if (RTEST(ret)) rb_ary_push(ary, keystr);
     }
 
+ delete:
     for (i = 0; i < RARRAY(ary)->len; i++)
         rb_gdbm_delete(obj, RARRAY(ary)->ptr[i]);
+    if (status) rb_jump_tag(status);
 
     return obj;
 }
--- testgdbm.rb.bak	Mon Apr 30 01:21:50 2001
+++ testgdbm.rb	Tue May  1 00:14:18 2001
@@ -45,6 +45,18 @@
     p Dir.glob("tmptest_gdbm*") if $DEBUG
   end
 
+  def check_size(expect, gdbm=@gdbm)
+    assert_equals(expect, gdbm.size)
+    n = 0
+    gdbm.each { n+=1 }
+    assert_equals(expect, n)
+    if expect == 0
+      assert_equals(true, gdbm.empty?)
+    else
+      assert_equals(false, gdbm.empty?)
+    end
+  end
+
   def test_version
     STDERR.print GDBM::VERSION
   end
@@ -430,11 +442,40 @@
 
     ret = @gdbm.delete_if {|key, val| key.to_i < 50}
     assert_equals(@gdbm, ret)
-    assert_equals(50, @gdbm.size)
+    check_size(50, @gdbm)
 
     ret = @gdbm.delete_if {|key, val| key.to_i >= 50}
     assert_equals(@gdbm, ret)
-    assert_equals(0, @gdbm.size)
+    check_size(0, @gdbm)
+
+    # break
+    100.times {|v| @gdbm[v] = v}
+    check_size(100, @gdbm)
+    n = 0;
+    @gdbm.delete_if {|key, val|
+      break if n > 50
+      n+=1
+      true
+    }
+    assert_equals(51, n)
+    check_size(49, @gdbm)
+
+    @gdbm.clear
+
+    # raise
+    100.times {|v| @gdbm[v] = v}
+    check_size(100, @gdbm)
+    n = 0;
+    begin
+      @gdbm.delete_if {|key, val|
+	raise "runtime error" if n > 50
+	n+=1
+	true
+      }
+    rescue
+    end
+    assert_equals(51, n)
+    check_size(49, @gdbm)
   end
 
   def test_reject

In This Thread