Backport #7629

Segmentation fault

Added by Antonio Tapiador about 2 years ago. Updated about 2 years ago.

[ruby-core:51170]
Status:Closed
Priority:Normal
Assignee:-

Description

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

You can find a full trace of the bug at https://travis-ci.org/ging/social_stream/jobs/3843546

yorickpeterse_segfault_1_9_3p362.txt Magnifier (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 Model.page method Closed 01/07/2013

Associated revisions

Revision 38726
Added by Usaku NAKAMURA about 2 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]

History

#1 Updated by Yoav Aner about 2 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 Updated by Eric Wong about 2 years ago

"atd (Antonio Tapiador)" atapiador@dit.upm.es wrote:

https://bugs.ruby-lang.org/issues/7629

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

You can find a full trace of the bug at https://travis-ci.org/ging/social_stream/jobs/3843546

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://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@38314 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);
-
VALUE
rb_vm_make_env_object(rb_thread_t * th, rb_control_frame_t *cfp)
{
VALUE envval;
- VALUE *lfp;
- rb_block_t *blockptr;

  if (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_FINISH) {
/* for method_missing */
cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
  }
  • 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 Updated by Mathias Meyer about 2 years ago

We've had several reports of this kind of segfault on Travis CI: https://github.com/travis-ci/travis-ci/issues/827

#4 Updated by Eyeshield 21 about 2 years ago

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

https://gist.github.com/213b9129e93f56ddee56

#5 Updated by Eito Katagiri about 2 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. https://gist.github.com/4411144

#6 Updated by Vitalii Khustochka about 2 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 Updated by Sumeet Singh about 2 years ago

Getting the same seg fault.

#8 Updated by Daniel Doezema about 2 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]
...

Running

  • 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 Updated by Shota Fukumori about 2 years ago

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

#10 Updated by Yorick Peterse about 2 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 Updated by Fabio Napoleoni about 2 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 about 2 years ago

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

#13 Updated by Usaku NAKAMURA about 2 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 Updated by Antonio Tapiador about 2 years ago

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

Also available in: Atom PDF