From: "Aleksi Niemelä" Date: 2001-09-02T04:51:37+09:00 Subject: [ruby-talk:20683] eruby 0.9.6 doesn't work with ruby 1.7.1 I can't make eruby 0.9.6 work with ruby 1.7.1. It works fine with ruby 1.6.1. Here's a small eruby script which core dumps on every run (eruby core dumps with other standard libraries as well): <% require 'thread' %> And as far as I'm able to decipher the debugger output the file is being closed (by calling rb_io_close) normally after succesful read, but in the meanwhile the IO object gets messed so that RFILE(io)->fptr (on io.c:1107) actually points to 0x8 instead of some meaningful struct containing FILE pointers. Where and why it's messed up beats me. Here's some debugging info. The platform is i686-linux on a bit modernized Redhat 7.0. Many thanks. - Aleksi Here are the strace outputs (first core dumps and the latter with 1.6.4 works): [eruby-0.9.6-1.7]$ strace ./eruby ~/public_html/monitor3.rhtml ... stat64("/usr/local/lib/ruby/1.7/thread.rb", {st_mode=S_IFREG|0644, st_size=4350, ...}) = 0 open("/usr/local/lib/ruby/1.7/thread.rb", O_RDONLY) = 4 close(4) = 0 open("/usr/local/lib/ruby/1.7/thread.rb", O_RDONLY) = 4 close(4) = 0 open("/usr/local/lib/ruby/1.7/thread.rb", O_RDONLY) = 4 fstat64(4, {st_mode=S_IFREG|0644, st_size=4350, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000 read(4, "#\n#\t\tthread.rb - thread support "..., 4096) = 4096 brk(0x8115000) = 0x8115000 brk(0x8116000) = 0x8116000 read(4, "it.shift\n\tt.wakeup if t\n re"..., 4096) = 254 read(4, "", 4096) = 0 close(4) = 0 munmap(0x40018000, 4096) = 0 close(3) = 0 munmap(0x40017000, 4096) = 0 --- SIGSEGV (Segmentation fault) --- write(2, "./eruby: [BUG] Segmentation faul"..., 33./eruby: [BUG] Segmentation fault) = 33 write(2, "\n", 1 ) = 1 write(2, "ruby 1.7.1 (2001-08-29) [i686-li"..., 37ruby 1.7.1 (2001-08-29) [i686-linux] ) = 37 rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0 getpid() = 13817 kill(13817, SIGABRT) = 0 --- SIGABRT (Aborted) --- +++ killed by SIGABRT +++ [eruby-0.9.6-1.6]$ strace ./eruby ~/public_html/monitor3.rhtml ... stat64("/usr/local/lib/ruby/1.6/thread.rb", {st_mode=S_IFREG|0644, st_size=4301, ...}) = 0 stat64("/usr/local/lib/ruby/1.6/thread.rb", {st_mode=S_IFREG|0644, st_size=4301, ...}) = 0 open("/usr/local/lib/ruby/1.6/thread.rb", O_RDONLY) = 4 close(4) = 0 open("/usr/local/lib/ruby/1.6/thread.rb", O_RDONLY) = 4 fstat64(4, {st_mode=S_IFREG|0644, st_size=4301, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000 read(4, "#\n#\t\tthread.rb - thread support "..., 4096) = 4096 brk(0x810a000) = 0x810a000 brk(0x810b000) = 0x810b000 read(4, "\tretry\n ensure\n\tThread.crit"..., 4096) = 205 read(4, "", 4096) = 0 close(4) = 0 munmap(0x40018000, 4096) = 0 close(3) = 0 munmap(0x40017000, 4096) = 0 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 12), ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000 ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0 write(1, "\n", 1 ) = 1 write(1, "\n", 1 ) = 1 munmap(0x40017000, 4096) = 0 _exit(0) = ? And finally a gdb stacktrace: Starting program: /home/aleksi/imu/ruby/raa/eruby-0.9.6-1.7/eruby /home/aleksi/public_html/monitor3.rhtml Program received signal SIGSEGV, Segmentation fault. rb_io_fptr_close (fptr=0x8) at io.c:1094 1094 if (!fptr->f && !fptr->f2) return; (gdb) bt #0 rb_io_fptr_close (fptr=0x8) at io.c:1094 #1 0x807918f in rb_io_close (io=1075559332) at io.c:1108 #2 0x8053ac9 in eruby_load ( filename=0xbffff8cb "/home/aleksi/public_html/monitor3.rhtml", wrap=0, state=0xbffff690) at eruby_lib.c:692 #3 0x80523cd in run () at eruby_main.c:531 #4 0x8052503 in main (argc=2, argv=0xbffff72c) at eruby_main.c:558 #5 0x40093b5c in __libc_start_main (main=0x80524e4
, argc=2, ubp_av=0xbffff72c, init=0x80507b4 <_init>, fini=0x80bab90 <_fini>, rtld_fini=0x4000d634 <_dl_fini>, stack_end=0xbffff724) at ../sysdeps/generic/libc-start.c:129 This transmission is intended only for the use of the individual or entity to which it is addressed. The message may contain information that is private and confidential. If the reader of this message is not the intended recipient or the employee or agent responsible for delivering the message to the intended recipient, you are hereby notified that any distribution, dissemination or copying of this message is strictly prohibited. If you have received this message in error, please notify the sender immediately by return E-mail and remove the original message. Thank You. The content of this message is not given or endorsed by HEX unless such content relates to the official business of the firm. HEX reserves the right to monitor all E-mail communications through its networks. The attachments have been scanned for viruses prior to leaving our E-mail server. HEX shall not be liable for any consequences of any virus being passed on.