[#42344] [ruby-trunk - Feature #5964][Open] Make Symbols an Alternate Syntax for Strings — Tom Wardrop <tom@...>

23 messages 2012/02/03

[#42443] [ruby-trunk - Bug #5985][Open] miniruby skews "make benchmark" results — Eric Wong <normalperson@...>

21 messages 2012/02/08

[#42444] [ruby-trunk - Bug #5986][Open] Segmentation Fault — Luis Matta <levmatta@...>

16 messages 2012/02/08

[#42471] [ruby-trunk - Feature #5995][Open] calling io_advise_internal() in read_all() — Masaki Matsushita <glass.saga@...>

20 messages 2012/02/10

[#42560] [ruby-trunk - Bug #6011][Open] ruby-1.9.3-p0/lib/webrick/utils.rb:184: [BUG] Segmentation fault — Vit Ondruch <v.ondruch@...>

12 messages 2012/02/13

[#42579] [ruby-trunk - Bug #6012][Open] Proc#source_location also return the column — Roger Pack <rogerpack2005@...>

14 messages 2012/02/14

[#42685] [ruby-trunk - Bug #6036][Open] Test failures in Fedora Rawhide/17 — Bohuslav Kabrda <bkabrda@...>

14 messages 2012/02/16

[#42697] [ruby-trunk - Bug #6040][Open] Transcoding test failure: Big5 to UTF8 not defined (MinGW) — Luis Lavena <luislavena@...>

10 messages 2012/02/16

[#42813] [ruby-trunk - Feature #6065][Open] Allow Bignum marshalling/unmarshalling from C API — Martin Bosslet <Martin.Bosslet@...>

22 messages 2012/02/23

[#42815] [ruby-trunk - Bug #6066][Open] Fix "control may reach end of non-void function" warnings for clang — Eric Hodel <[email protected]>

15 messages 2012/02/23

[#42857] [ruby-trunk - Feature #6074][Open] Allow alias arguments to have a comma — Thomas Sawyer <transfire@...>

20 messages 2012/02/24

[#42891] [ruby-trunk - Feature #6083][Open] Hide a Bignum definition — Koichi Sasada <redmine@...>

23 messages 2012/02/25

[#42906] [ruby-trunk - Bug #6085][Open] Treatment of Wrong Number of Arguments — Marc-Andre Lafortune <ruby-core@...>

14 messages 2012/02/25

[#42949] [ruby-trunk - Bug #6089][Open] Test suite fails with OpenSSL 1.0.1 — Vit Ondruch <v.ondruch@...>

13 messages 2012/02/26

[ruby-core:42727] Re: strange 1.9.3 GC issue with Nokogiri

From: Narihiro Nakamura <authornari@...>
Date: 2012-02-18 01:08:39 UTC
List: ruby-core #42727
Hi.

2012/2/17 Tim Elliott <[email protected]>:
> On Wed, Feb 15, 2012 at 4:39 PM, Eric Wong <[email protected]> wrote:
>> I've reproduced the original issue on both 1.9.3-p0 and p105 on
>> x86_64-linux. =A0It can take a minute to an hour to hit the SEGV. =A0It =
does
>> not appear to manifest on 1.9.2, so maybe it is a bad interaction with
>> lazy-sweep in 1.9.3
>
> I've isolated the issue to a ruby extension that has 140 lines of C
> code and shows the same (or a similar) segfault.
>
> If this is helpful, you can clone it here:
> git://github.com/ender672/minigiri.git
>
> Or view the C code here:
> https://github.com/ender672/minigiri/blob/master/minigiri.c
>
> Some things it does may seem strange, but that is because it tries to
> match what Nokogiri does.

Thanks for a your simple reproducible code.

I think it's lazy-sweep bug, so I'm going to fix it.

If a your program start Full GC (GC.strat,etc..) during lazy sweeping,
unmarked objects (dead objects) in unsweeped slots are not freed,
because we trust that FullGC will free their.
However, in the mark phase of FullGC, a dead object might be marked by a
false pointer. I think this is a bug.

In Nokogiri, as following, 'data[doc]' has dfree and 'data[node]' has
dmark.
# data[doc] is Data_Wrap_Struct(klass, 0, doc_dealloc, doc).
# data[node] is Data_Wrap_Struct(klass, mark, 0, node).

         dfree                              dmark
 data[doc] -> doc -> node   data[doc] <- node <- data[node]

If lazy sweep frees a data[doc], then we start the mark phase in
interrupt FullGC, data[node] might be marked by the above reason.
This mark raises SEGV because data[doc] and doc and node are freed.

Your patch which sets data[node] to the instance variable in data[doc]
avoids the above problem, because the object flag on a freed data[doc]
is 0, so it avoids this mark process.

Regards.

--=20
Narihiro Nakamura (nari)

In This Thread