This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ruby on Rails 2.0.2/Cygwin Bug


Over on the comp.ruby.lang group, I got a reply from Matz, the lead
Ruby developer:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/284495

He states: "The bug must lie between Cygwin and Ruby.  We don't call
lseek explicitly.  You can clearly see this by doing strace on Linux
(or other platforms), which don't call lseek at all.  So, someone (in
the library, I guess) must call lseek weirdly on Cygwin."

I know that Corinna noted that Linux was doing lseeks:

On Dec 22, 2007 7:51 AM, Corinna Vinschen <corinna-cygwin@cygwin.com> wrote:
> Two lseek's of dubious purpose.  Why did it read 64K and then tries to
> seek back?  Why does it rely on the return code of the first lseek?
> Doing the same on Linux returns also with 0 from the first lseek, but
> with -1 from the second call and errno set to EINVAL.  However,
> according to the strace, it never *tries* to call lseek on Linux.

However, when I tried strace ruby urandom_test.rb on a few flavors of
Linux, I did not see lseeks in the output. I ran the code on Ubuntu
7.04, RHEL 2.1AS, and whatever brand of Linux is running on Dreamhost.
Which version did you try?

My Cygwin:
   29  467324 [main] ruby 2944 open: 3 = open (/dev/urandom, 0x0)
   51  467375 [main] ruby 2944 _cygwin_istext_for_stdio: fd 3: opened as binary
 2461  469836 [main] ruby 2944 fhandler_base::fstat: here
   45  469881 [main] ruby 2944 fstat64: 0 = fstat (3, 0x24096E0)
  385  470266 [main] ruby 2944 isatty: 0 = isatty (3)
   35  470301 [main] ruby 2944 sig_send: sendsig 0x6F8, pid 2944,
signal -34, its_me 1
  414  470715 [main] ruby 2944 sig_send: wakeup 0x6FC
   60  470775 [main] ruby 2944 sig_send: Waiting for pack.wakeup 0x6FC
  178  470953 [sig] ruby 2944 wait_sig: signalling pack.wakeup 0x6FC
  146  471099 [main] ruby 2944 sig_send: returning 0x0 from sending signal -34
   36  471135 [main] ruby 2944 readv: readv (3, 0x2409700, 1)
blocking, sigcatchers 10
  133  471268 [main] ruby 2944 readv: no need to call ready_for_read
23838  495106 [main] ruby 2944 readv: 65536 = readv (3, 0x2409700, 1), errno 2
  940  496046 [main] ruby 2944 lseek64: 0 = lseek (3, 0, 1)
  524  496570 [main] ruby 2944 lseek64: 0 = lseek (3, -65472, 0)
   73  496643 [main] ruby 2944 close: close (3)


RHEL 2.1AS (Ubuntu 7.04 output was similar):
open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFCHR|0644, st_rdev=makedev(1, 9), ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffe9c30) = -1 EINVAL
(Invalid argument)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0x40018000
read(3, "\20gI\263\322j5E\345\24[\245\200,\375\23UT}\210(<\365\310"...,
4096) = 4096
close(3)                                = 0

Thanks,
Mike Boone
http://boonedocks.net/mike/

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]