Subject: Re: pkg/34859: ruby with native pthread broken
To: None <taca@NetBSD.org, gnats-admin@netbsd.org, pkgsrc-bugs@netbsd.org,>
From: Takayoshi Kochi <takayoshi.kochi@gmail.com>
List: pkgsrc-bugs
Date: 11/07/2006 06:00:04
The following reply was made to PR pkg/34859; it has been noted by GNATS.

From: "Takayoshi Kochi" <takayoshi.kochi@gmail.com>
To: "Takahiro Kambe" <taca@back-street.net>
Cc: gnats-bugs@netbsd.org, taca@netbsd.org, gnats-admin@netbsd.org,
	pkgsrc-bugs@netbsd.org
Subject: Re: pkg/34859: ruby with native pthread broken
Date: Tue, 7 Nov 2006 14:56:34 +0900

 I rebuilt all ruby and its installed libraries from scratch but it
 happened again.
 
 > > > Kambe-san, do you have any idea whether "comparison of Fixnum with Float failed"
 > > > can happen on `min' method for an array?
 
 I inserted some debug prints and found that [NaN, 0].min can produce
 the exception.
 
 % irb
 irb(main):001:0> a = 0.0 / 0.0
 => NaN
 irb(main):002:0> [a, 1].min
 ArgumentError: comparison of Fixnum with Float failed    <==== (*)
         from (irb):2:in `min'
         from (irb):2:in `each'
         from (irb):2:in `min'
         from (irb):2
 
 > ~% bsfilter -u --verbose
 > start Thu, Oct 26 2006 16:49:13 +0900
 > open /home/kochi/.bsfilter/C.clean.sdbm 32518 tokens 1278 mails by 5136.
 > open /home/kochi/.bsfilter/C.spam.sdbm 79001 tokens 8010 mails by 5136.
 > /home/kochi/bin/bsfilter:261:in `min': comparison of Fixnum with Float
 > failed (ArgumentError)
 >         from /home/kochi/bin/bsfilter:1726:in `each'
 >         from /home/kochi/bin/bsfilter:1726:in `min'
 >         from /home/kochi/bin/bsfilter:1726:in `update_probability'
 >         from /home/kochi/bin/bsfilter:1724:in `each'
 >         from /home/kochi/bin/bsfilter:1724:in `update_probability'
 >         from /home/kochi/bin/bsfilter:3348:in `run'
 >         from /home/kochi/bin/bsfilter:3345:in `each'
 >         from /home/kochi/bin/bsfilter:3345:in `run'
 >         from /home/kochi/bin/bsfilter:3412
 >
 > Mmm, this may not be informative ;(
 
 The line that produced the trace above is:
 
          b = [@spam.value(category, token) || 0, s_count].min
 
 and I tried to change the above into:
 
         begin
           b = [@spam.value(category, token) || 0, s_count].min
         rescue ArgumentError
           p @spam.value(category, token)
           p @spam.value(category, token) || 0
           p s_count
         end
 
 and see how they print.
 
 The result varied:
 
 case 1: NaN, NaN, 8028
 case 2: NaN, undefined method `value' for nil:NilClass (NoMethodError)
 case 3: NaN, 2.0, 8028
 
 Apparently @spam.value(...) is producing NaN but (NaN) || 0 seems
 producing random results.
 
 I'll investigate this further while I'll try other DBMs (gdbm, qdbm, ...)
 as well.
 
 -- 
 Takayoshi Kochi