Backport #1396

Kernel.sleep fails with some Float values

Added by plambert (Paul Lambert) about 3 years ago. Updated about 1 year ago.

Status:Assigned Start date:04/22/2009
Priority:Normal Due date:
Assignee:wyhaines (Kirk Haines) % Done:

100%

Category:-
Target version:-

Description

I'm on Mac OS X Leopard 10.5.6, running ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9]

irb(main):003:0> sleep (0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1)
Errno::EINVAL: Invalid argument - sleep
	from (irb):3:in `sleep'
	from (irb):3
	from :0
irb(main):004:0> x= (0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1)
=> 1.0
irb(main):005:0> x.inspect
=> "1.0"
irb(main):006:0> sleep x
Errno::EINVAL: Invalid argument - sleep
	from (irb):6:in `sleep'
	from (irb):6
	from :0
irb(main):007:0> sleep (x+0.0)
Errno::EINVAL: Invalid argument - sleep
	from (irb):7:in `sleep'
	from (irb):7
	from :0
irb(main):018:0> sleep((x*100.0)/100.0)
Errno::EINVAL: Invalid argument - sleep
	from (irb):18:in `sleep'
	from (irb):18
	from :0
irb(main):019:0> sleep((x*100.0).to_i/100.0)
=> 1

Associated revisions

Revision 23259
Added by nobu about 3 years ago

* time.c (time_timeval): check out-of-range. [ruby-core:23282] [Bug #1396]

Revision 24060
Added by shyouhei almost 3 years ago

merge revision(s) 23259,24059: * time.c (time_timeval): check out-of-range. [ruby-core:23282] [Bug #1396] * time.c (time_timeval): rounds subsecond toward zero.

History

Updated by znz (Kazuhiro NISHIYAMA) about 3 years ago

I can reproduce on powerpc Mac OS X.

ppc-mac-mini:~ kazu$ build/ruby/ruby_1_8_7/ruby/ruby-1.8.7 -ve 'sleep(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1)'
ruby 1.8.7 (2009-01-07 patchlevel 79) [powerpc-darwin9.6.0]
-e:1:in `sleep': Invalid argument - sleep (Errno::EINVAL)
        from -e:1
ppc-mac-mini:~ kazu$ gdb --args build/ruby/ruby_1_8_7/ruby/ruby-1.8.7 -ve 'sleep(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1)'
GNU gdb 6.3.50-20050815 (Apple version gdb-768) (Tue Oct  2 04:11:19 UTC 2007)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "powerpc-apple-darwin"...Reading symbols for shared libraries ..... done

(gdb) b select
Breakpoint 1 at 0x9fc08
Breakpoint 2 at 0x68160
Breakpoint 3 at 0x64d14
Breakpoint 4 at 0x49fdc
Breakpoint 5 at 0x49f98
warning: Multiple breakpoints were set.
Use the "delete" command to delete unwanted breakpoints.
(gdb) r
Starting program: /Users/kazu/build/ruby/ruby_1_8_7/ruby/ruby-1.8.7 -ve sleep\(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1\)
Reading symbols for shared libraries ++++... done
Breakpoint 1 at 0x92ebac18
Breakpoint 2 at 0x92e83180
Breakpoint 3 at 0x92e7fd14
Breakpoint 4 at 0x92e64fdc
Breakpoint 5 at 0x92e64fb8
ruby 1.8.7 (2009-01-07 patchlevel 79) [powerpc-darwin9.6.0]

Breakpoint 3, 0x92e7fd14 in select$DARWIN_EXTSN ()
(gdb) up
#1  0x00145854 in rb_thread_wait_for (time={tv_sec = 0, tv_usec = 1000000}) at /Users/kazu/wc/ruby/branches/ruby_1_8_7/eval.c:11239
11239               n = select(0, 0, 0, 0, &time);
(gdb) p time
$1 = {
  tv_sec = 0, 
  tv_usec = 1000000
}
(gdb) 

Updated by nobu (Nobuyoshi Nakada) about 3 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100
Applied in changeset r23259.

Updated by shyouhei (Shyouhei Urabe) about 3 years ago

  • Status changed from Closed to Open
  • Assignee set to shyouhei (Shyouhei Urabe)

Updated by shyouhei (Shyouhei Urabe) almost 3 years ago

  • Status changed from Open to Closed
Applied in changeset r24060.

Updated by shyouhei (Shyouhei Urabe) almost 3 years ago

  • Status changed from Closed to Open
  • Assignee changed from shyouhei (Shyouhei Urabe) to wyhaines (Kirk Haines)

Updated by shyouhei (Shyouhei Urabe) over 1 year ago

  • Status changed from Open to Assigned

Also available in: Atom PDF