Backport #7629

Segmentation fault

Added by Antonio Tapiador over 1 year ago. Updated over 1 year 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 Backport93 - Backport #7658: Rabbit が Ruby 1.9.3p362 で落ちる Closed
Duplicated by Backport93 - 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 over 1 year 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 over 1 year 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/activerecord/relation.rb:241: [BUG] Segmentation fault
ruby 1.9.3p362 (2012-12-25 revision 38607) [x86
64-linux]

#2 Updated by Eric Wong over 1 year 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 @@ vmcollectlocalvariablesinheap(rbthread_t *th, VALUE *dfp, VALUE ary)
}
}

-static VALUE vmmakeprocfromblock(rbthreadt *th, rbblockt *block);
-
VALUE
rbvmmakeenvobject(rbthreadt * th, rbcontrolframet *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 = GCGUARDEDPTR_REF(lfp[0]); -
  • if (blockptr && !(lfp[0] & 0x02)) {
  • VALUE blockprocval = vmmakeprocfromblock(th, blockptr);
  • rbproct *p;
  • GetProcPtr(blockprocval, p);
  • lfp[0] = GCGUARDEDPTR(&p->block);
  • }

    envval = vmmakeenveach(th, cfp, cfp->dfp, cfp->lfp);
    rb
    vmrewritedfpinerrinfo(th);

    @@ -559,6 +545,16 @@ rbvmmakeproc(rbthreadt *th, const rbblockt *block, VALUE klass)
    rb
    bug("rbvmmake_proc: Proc value is already created.");
    }

  • if (GCGUARDEDPTR_REF(cfp->lfp[0])) {

  • rbproct *p;
    +

  • blockprocval = vmmakeprocfromblock(

  •  th, (rb_block_t *)GC_GUARDED_PTR_REF(*cfp->lfp));
    

    +

  • GetProcPtr(blockprocval, p);

  • *cfp->lfp = GCGUARDEDPTR(&p->block);

  • }
    +
    envval = rbvmmakeenvobject(th, cfp);

    if (PROCDEBUG) {

#3 Updated by Mathias Meyer over 1 year 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 over 1 year 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 over 1 year 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 over 1 year 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 over 1 year ago

Getting the same seg fault.

#8 Updated by Daniel Doezema over 1 year 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/activerecord/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 over 1 year ago

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

#10 Updated by Yorick Peterse over 1 year ago

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

#11 Updated by Fabio Napoleoni over 1 year 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 1 year ago

  • Tracker changed from Bug to Backport
  • Project changed from ruby-trunk to Backport93

#13 Updated by Usaku NAKAMURA over 1 year 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 over 1 year ago

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

Also available in: Atom PDF