Subject: Re: pkg/34859: ruby with native pthread broken
To: Takahiro Kambe <taca@back-street.net>
From: Takayoshi Kochi <takayoshi.kochi@gmail.com>
List: pkgsrc-bugs
Date: 11/07/2006 14:56:34
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