ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: ko1@atdot.net
To: ruby-core@ruby-lang.org
Subject: [ruby-core:71588] [Ruby trunk - Bug #11692] [PATCH] Re-enable GC if stack overflow was caught from signal handler
Date: Thu, 19 Nov 2015 13:47:32 +0000	[thread overview]
Message-ID: <redmine.journal-54971.20151119134732.2e86447bbfe78660@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-11692.20151115172431@ruby-lang.org

Issue #11692 has been updated by Koichi Sasada.


Unfortunately, it is known problem (2nd time machine stack overflow we can not capture correctly).

* 1st machine stack overflow
  * SEGV
  * check machine stack overflow
  * raise an error from signal handler (*1) by longjmp.
* 2nd machine stack overflow
  * SEGV
  * signal status is signaling. So OS can not deliver signal correctly...

The correct way is restoring signal status using sigsetjmp/siglongjmp at (*1).
However, on Linux 2.x, siglongjmp is too slow than longjmp, so that we continue to use longjmp, at least the last time we had discussed this issue. We can't slow down Ruby interpreter for such a corner case.

However, Linux 2.x is older OS. So that we can change.
(BTW, I'm using Linux 2.6 on several machines)


----------------------------------------
Bug #11692: [PATCH] Re-enable GC if stack overflow was caught from signal handler
https://bugs.ruby-lang.org/issues/11692#change-54971

* Author: Alex Gaziev
* Status: Closed
* Priority: Normal
* Assignee: Koichi Sasada
* ruby -v: 
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
We got ruby application running on our production server and noticed that it regularly crashes with out of memory errors.
After months of investigation, I narrowed the case to the examples (1/2). 
After digging ruby sources and running test code, I found out that GC stopped working after recovering from native stack overflow error.
Probably the relevant code appeared in 2.2 https://github.com/ruby/ruby/commit/0c391a55d3ed4637e17462d9b9b8aa21e64e2340
where ruby_disable_gc_stress became ruby_disable_gc.

Patches for trunk and 2.2 branches below.

---Files--------------------------------
example1.rb (311 Bytes)
example2.rb (333 Bytes)
re-enable-gc-after-stackoverflow-trunk.patch (985 Bytes)
re-enable-gc-after-stackoverflow-ruby-2-2.patch (985 Bytes)
gc_threads_issue.rb (1.53 KB)


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

  parent reply	other threads:[~2015-11-19 13:16 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-11692.20151115172431@ruby-lang.org>
2015-11-15 17:24 ` [ruby-core:71497] [Ruby trunk - Bug #11692] [Open] [PATCH] Re-enable GC if stack overflow was caught from signal handler alex.gaziev
2015-11-16 13:46 ` [ruby-core:71505] [Ruby trunk - Bug #11692] " alex.gaziev
2015-11-17 19:52 ` [ruby-core:71525] " edgars.beigarts
2015-11-17 19:53 ` [ruby-core:71526] " edgars.beigarts
2015-11-18  1:52 ` [ruby-core:71537] " alex.gaziev
2015-11-19  6:55 ` [ruby-core:71571] " ko1
2015-11-19  8:55 ` [ruby-core:71579] " edgars.beigarts
2015-11-19 13:47 ` ko1 [this message]
2015-11-20  6:55 ` [ruby-core:71603] " alex.gaziev
2015-12-18 10:09 ` [ruby-core:72360] " alex.gaziev
2015-12-18 10:15 ` [ruby-core:72361] " v.ondruch
2015-12-18 10:16 ` [ruby-core:72362] " alex.gaziev
2016-03-28 17:21 ` [ruby-core:74642] [Ruby trunk Bug#11692] " nagachika00

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-54971.20151119134732.2e86447bbfe78660@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).