Bug #2235
Updated by jeremyevans0 (Jeremy Evans) over 4 years ago
=begin Running (on ruby 1.9.1 branch) this script : *** Begin script *** #!/usr/bin/env ruby require 'pty' r, w, pid = PTY.spawn("echo 'hello world'; sleep 1") puts "sleeping" sleep 5 puts "done" ***** End script ***** causes this segmentation fault (run it a few times if it doesn't at first try): *** Begin output **** [BUG] Segmentation fault ruby 1.9.1p281 (2009-08-09 revision 24476) [i386-darwin9.8.0] -- control frame ---------- c:0001 p:---- s:0002 b:0002 l:000001 d:000001 TOP --------------------------- -- Ruby level backtrace information----------------------------------------- -- C level backtrace information ------------------------------------------- 0x1179d2 0 ruby 0x001179d2 rb_vm_bugreport + 82 0x2c46c 1 ruby 0x0002c46c rb_warning + 444 0x2c4cb 2 ruby 0x0002c4cb rb_bug + 43 0xbdcd8 3 ruby 0x000bdcd8 rb_enable_interrupt + 232 0x90e042bb 4 libSystem.B.dylib 0x90e042bb _sigtramp + 43 0xffffffff 5 ??? 0xffffffff 0x0 + 4294967295 0x103986 6 ruby 0x00103986 rb_get_method_body + 38 0x107615 7 ruby 0x00107615 rb_funcall + 229 0x4235ab 8 pty.bundle 0x004235ab 0x0 + 4339115 0x423686 9 pty.bundle 0x00423686 0x0 + 4339334 0x11d556 10 ruby 0x0011d556 rb_exec_recursive + 1030 0x11d591 11 ruby 0x0011d591 rb_exec_recursive + 1089 0x90dc9155 12 libSystem.B.dylib 0x90dc9155 _pthread_start + 321 0x90dc9012 13 libSystem.B.dylib 0x90dc9012 thread_start + 34 [NOTE] You may encounter a bug of Ruby interpreter. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html Abort trap ***** End output *** The problem is caused by the fact that pty_getpty allocates pty info struct on the stack (line 453) and then passes them to pty_syswait which is run on a new thread. One fix would be to just xcalloc them. But there is also a secondary design problem in that when this is fixed, PTY throws a asynchronous exception when the process finishes. That the process finished in not an exception and making it async means the exception could happen anywhere in my main code which is hard to handle. Both of these are fixed on trunk. The segfault by itself should definitely be fixed but it would be great if the changes on trunk were merged into 1.9.1 branch. (I personally think both should be fixed). Any chances of that? =end