Backport #7629

Segmentation fault

Added by Antonio Tapiador almost 4 years ago. Updated over 3 years ago.



ruby 1.9.3p362 produces a segmentation fault in our tests in Travis.

You can find a full trace of the bug at

yorickpeterse_segfault_1_9_3p362.txt View (35.4 KB) Yorick Peterse, 01/04/2013 04:38 AM

Related issues

Duplicated by Backport193 - Backport #7658: Rabbit が Ruby 1.9.3p362 で落ちる Closed
Duplicated by Backport193 - Backport #7669: Ruby 1.9.3p362 Segfaults on gem kaminari method Closed 01/07/2013

Associated revisions

Revision 38726
Added by Usaku NAKAMURA over 3 years ago

merge revision(s) 38213: [Backport #7629]

* vm.c (rb_vm_make_proc): save the proc made from the given block so
  that it will not get collected.   [Bug #7507]


#1 [ruby-core:51171] Updated by Yoav Aner almost 4 years ago

we're also seeing a very similar segmentation fault after upgrading to 1.9.3p362 with unicorn (rails 3.2.9, postgresql 9.2)

vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.9/lib/active_record/relation.rb:241: [BUG] Segmentation fault
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-linux]

#2 [ruby-core:51185] Updated by Eric Wong almost 4 years ago

"atd (Antonio Tapiador)" wrote:

ruby 1.9.3p362 produces a segmentation fault in our tests in Travis.

You can find a full trace of the bug at

Can you try reverting the vm.c change of r38314?
(I just identified with "git bisect", not sure what the correct fix is)

commit 190156054e33bc3b3bdd9e7965a1fe4a8cd50ebf
Author: usa usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Date: Tue Dec 11 08:51:25 2012 +0000

 [Backport #5634]

 * vm.c (rb_vm_make_env_object): make Proc object if Env is possible
   to point block.  [ruby-trunk - Bug #5634]

 * vm.c (rb_vm_make_proc): No need to make Proc object here.

 * bootstraptest/test_proc.rb: add tests.

 git-svn-id: svn+ssh:// b2dd03c8-39d4-4d8f-98ff-823fe69b080e

diff --git a/vm.c b/vm.c
index 4dd242f..63141ba 100644
--- a/vm.c
+++ b/vm.c
@@ -467,30 +467,16 @@ vm_collect_local_variables_in_heap(rb_thread_t *th, VALUE *dfp, VALUE ary)

-static VALUE vm_make_proc_from_block(rb_thread_t *th, rb_block_t *block);
rb_vm_make_env_object(rb_thread_t * th, rb_control_frame_t *cfp)
VALUE envval;
- VALUE *lfp;
- rb_block_t *blockptr;

/* for method_missing */
  • lfp = cfp->lfp;
  • blockptr = GC_GUARDED_PTR_REF(lfp[0]); -
  • if (blockptr && !(lfp[0] & 0x02)) {
  • VALUE blockprocval = vm_make_proc_from_block(th, blockptr);
  • rb_proc_t *p;
  • GetProcPtr(blockprocval, p);
  • lfp[0] = GC_GUARDED_PTR(&p->block);
  • } - envval = vm_make_env_each(th, cfp, cfp->dfp, cfp->lfp); rb_vm_rewrite_dfp_in_errinfo(th);

@@ -559,6 +545,16 @@ rb_vm_make_proc(rb_thread_t *th, const rb_block_t *block, VALUE klass)
rb_bug("rb_vm_make_proc: Proc value is already created.");

  • if (GC_GUARDED_PTR_REF(cfp->lfp[0])) {
  • rb_proc_t *p; +
  • blockprocval = vm_make_proc_from_block(
  • th, (rb_block_t )GC_GUARDED_PTR_REF(cfp->lfp)); +
  • GetProcPtr(blockprocval, p);
  • *cfp->lfp = GC_GUARDED_PTR(&p->block);
  • }
    envval = rb_vm_make_env_object(th, cfp);

    if (PROCDEBUG) {

#3 [ruby-core:51191] Updated by Mathias Meyer almost 4 years ago

We've had several reports of this kind of segfault on Travis CI:

#4 [ruby-core:51194] Updated by Eyeshield 21 almost 4 years ago

in p362, i am also getting segfaults and cant easy repeat it (because its crushed not every time). p327 is ok.

#5 [ruby-core:51196] Updated by Eito Katagiri almost 4 years ago

I have similar segmentation fault on the same place (gems/activerecord-3.2.9/lib/active_record/relation.rb:241).

I ran gdb with core file when I got the segmentation fault.

#6 [ruby-core:51206] Updated by Vitalii Khustochka over 3 years ago

Seeing the same error at the same line (gems/activerecord-3.2.9/lib/active_record/relation.rb:241) after upgrading to 1.9.3p362

#7 [ruby-core:51208] Updated by Sumeet Singh over 3 years ago

Getting the same seg fault.

#8 [ruby-core:51214] Updated by Daniel Doezema over 3 years ago

I'm getting the same seg fault in local dev at very random times, but always within 50 requests -- On thin or unicorn server.

.rvm/gems/ruby-1.9.3-p362/gems/activerecord-3.2.9/lib/active_record/relation.rb:241: [BUG] Segmentation fault
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-darwin12.2.0]


  • Rails 3.2.9
  • PostgreSQL 9.2
  • Mountain Lion (10.8.2)

Going to try and revert to ruby-1.9.3-p327 and seeing how that goes.

#9 [ruby-core:51220] Updated by sorah Shota Fukumori over 3 years ago

FYI, 1.9.3-p362's make test fails at KNOWNBUG.rb in Moutain Lion and Linux.

#10 [ruby-core:51232] Updated by Yorick Peterse over 3 years ago

I also experienced this issue when running "camper_van" (a Campfire to IRC bridge). The segfault log can be found in the file called "yorickpeterse_segfault_1_9_3p362.txt".

#11 [ruby-core:51239] Updated by Fabio Napoleoni over 3 years ago

Getting the same errore in a Rails 3.2.8 application after upgrade from p327 to p362 both in Mountain Lion and Debian 6.

#12 Updated by Nobuyoshi Nakada over 3 years ago

  • Project changed from Ruby trunk to Backport193
  • Tracker changed from Bug to Backport

#13 Updated by Usaku NAKAMURA over 3 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r38726.
Antonio, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

merge revision(s) 38213: [Backport #7629]

* vm.c (rb_vm_make_proc): save the proc made from the given block so
  that it will not get collected.   [Bug #7507]

#14 [ruby-core:51317] Updated by Antonio Tapiador over 3 years ago

Usaku, it is my pleasure. Thank you for making Ruby so awesome

Also available in: Atom PDF