[#36034] [Backport92 - Backport #4651][Open] Bus Error using continuation on x86_64-darwin11.0.0 (Lion) — Erik Michaels-Ober <sferik@...>

17 messages 2011/05/07

[#36058] draft schedule of Ruby 1.9.3 — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

18 messages 2011/05/09

[#36131] Re: [ruby-cvs:38172] Ruby:r30989 (trunk): * include/ruby/win32.h: define WIN32 if neither _WIN64 nor WIN32 defined. it forces to use push/pop for pack(4) pragma. — "Yuki Sonoda (Yugui)" <yugui@...>

Hi arton,

7 messages 2011/05/12

[#36156] [Ruby 1.9 - Bug #4683][Open] [PATCH] io.c: copy_stream execute interrupts and retry — Eric Wong <normalperson@...>

11 messages 2011/05/12

[#36316] [Ruby 1.9 - Bug #4731][Open] ruby -S irb fails with mingw/msys vanilla builds — Roger Pack <rogerpack2005@...>

12 messages 2011/05/18

[#36329] [Ruby 1.9 - Bug #4738][Open] gem install fails with "Encoding::ConverterNotFoundError" on windows 7 greek — Ilias Lazaridis <ilias@...>

11 messages 2011/05/19

[#36390] [Ruby 1.9 - Feature #4766][Open] Range#bsearch — Yusuke Endoh <mame@...>

23 messages 2011/05/22

[#36406] 1.8.7 release next month — Urabe Shyouhei <shyouhei@...>

Hello core people,

18 messages 2011/05/23
[#36414] Re: 1.8.7 release next month — Luis Lavena <luislavena@...> 2011/05/23

2011/5/23 Urabe Shyouhei <[email protected]>:

[#36487] Re: 1.8.7 release next month — Urabe Shyouhei <shyouhei@...> 2011/05/26

Hi Luis,

[#36488] Re: 1.8.7 release next month — Hidetoshi NAGAI <nagai@...> 2011/05/26

From: Urabe Shyouhei <[email protected]>

[#36496] Re: 1.8.7 release next month — Hidetoshi NAGAI <nagai@...> 2011/05/26

From: Hidetoshi NAGAI <[email protected]>

[#36712] Re: 1.8.7 release next month — Urabe Shyouhei <shyouhei@...> 2011/06/03

Ping Luis, how's it going?

[#36748] Re: 1.8.7 release next month — Luis Lavena <luislavena@...> 2011/06/05

On Fri, Jun 3, 2011 at 5:18 AM, Urabe Shyouhei <[email protected]> wro=

[#36434] [Ruby 1.9 - Feature #4774][Open] User Friendly Handling of "Encoding::ConverterNotFoundError" — Lazaridis Ilias <ilias@...>

11 messages 2011/05/24

[#36447] [Ruby 1.9 - Bug #4777][Open] Ruby 1.9.2-p180 ignoring INT, TERM, and QUIT until it receives CONT — Nathan Sobo <nathansobo@...>

10 messages 2011/05/25

[#36559] [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Tom Wardrop <tom@...>

48 messages 2011/05/30
[#36560] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Yukihiro Matsumoto <matz@...> 2011/05/30

Hi,

[#36571] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Anurag Priyam <anurag08priyam@...> 2011/05/30

> Iff =A0{'key': 'value'} means {:key =3D> 'value'} I have no objection.

[#36573] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Yukihiro Matsumoto <matz@...> 2011/05/30

Hi,

[#36578] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Cezary <cezary.baginski@...> 2011/05/30

On Mon, May 30, 2011 at 04:21:32PM +0900, Yukihiro Matsumoto wrote:

[#36580] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Rodrigo Rosenfeld Rosas <rr.rosas@...> 2011/05/30

Em 30-05-2011 07:58, Cezary escreveu:

[#36581] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Michael Edgar <adgar@...> 2011/05/30

Since :"#{abc}" is allowed in Ruby, I imagine that any such substitute =

[#36587] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Cezary <cezary.baginski@...> 2011/05/30

On Mon, May 30, 2011 at 09:05:04PM +0900, Michael Edgar wrote:

[ruby-core:36105] [Ruby 1.9 - Bug #4612] Segmentation fault in fiber GC mark cycle

From: Tomoyuki Chikanaga <nagachika00@...>
Date: 2011-05-11 14:43:47 UTC
List: ruby-core #36105
Issue #4612 has been updated by Tomoyuki Chikanaga.


Hi,

Sorry for late reply, and thank you for your reporting bug :)

I've checked I can reproduce segv and your patch fix the problem.
And make test-all reports no extra error.
I think your patch is reasonable. I'll check in it to trunk.

 >BTW, while following the code around fibers and continuations, 
 >I've found another curious thing: fiber_free() calls cont_free(&fib->cont)
 >on its cont member, and cont_free() calls ruby_xfree() on it. Is that ok,
 >given cont was allocated as part of fiber, and don't we need to ruby_xfree the fib itself?
'cont' is a first member of structure 'rb_fiber_t', and
(void *)(&fib->cont) == (void *)&fib
That's why we don't need (in fact, must not) to call ruby_xfree() to fib itself.
----------------------------------------
Bug #4612: Segmentation fault in fiber GC mark cycle
http://redmine.ruby-lang.org/issues/4612

Author: Serge Balyuk
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.2p188 (2011-03-28 revision 31204) [x86_64-darwin10.7.0]


=begin
((|Fiber.current|)) can cause segfault on GC cycle when used in threads. Please find attached ruby sample which should help to pinpoint the problem.

The coredump shows the following backtrace:

 ....
 #18 <signal handler called>
 #19 0x000000010004cce5 in mark_locations_array (objspace=0x100838000, x=0x101dc8ab0, n=649) at gc.c:1315
 #20 0x000000010004cea6 in gc_mark_locations (objspace=0x100838000, start=0x101dc8ab0, end=0x101dc9f00) at gc.c:1331
 #21 0x000000010004f3dc in rb_gc_mark_machine_stack (th=0x1008a1048) at gc.c:2235
 #22 0x0000000100177a4f in rb_thread_mark (ptr=0x1008a1048) at vm.c:1683
 #23 0x000000010018179a in cont_mark (ptr=0x1008a1000) at cont.c:88
 #24 0x0000000100181947 in fiber_mark (ptr=0x1008a1000) at cont.c:168
 #25 0x000000010004dbb9 in gc_mark_children (objspace=0x100838000, ptr=4303907200, lev=1) at gc.c:1719
 #26 0x000000010004d3fb in gc_mark (objspace=0x100838000, ptr=4303907200, lev=0) at gc.c:1514
 #27 0x000000010004d428 in rb_gc_mark (ptr=4303907200) at gc.c:1520
 #28 0x000000010017797f in rb_thread_mark (ptr=0x10049fa00) at vm.c:1673
 ....

It looks like in frame 28 ((|rb_thread_mark|)) is called on terminated thread, which is ok, but then it goes down to fiber's continuation member ((|saved_thread|)) in frame 22. I think saved_thread holds an earlier snapshot (still running) of the same thread that we see in 28 (thread_id are equal), and because its machine stack pointers are stale, ((|rb_gc_mark_machine_stack|)) starts marking inaccessible memory.

One possible quick-fix is to set machine stack pointers to 0 in ((|cont_init()|)), given the original thread will take care of that stuff and free as needed. It cures segfaults, but I wonder if that doesn't break some other code.

I was also wondering why continuation holds a copy of thread struct instead of a pointer to it. It's hard to correctly follow real thread life cycle with ((|saved_thread|)). So can it harm in other cases like the above?

BTW, while following the code around fibers and continuations, I've found another curious thing: ((|fiber_free()|)) calls ((|cont_free(&fib->cont)|)) on its cont member, and ((|cont_free()|)) calls ((|ruby_xfree()|)) on it. Is that ok, given cont was allocated as part of fiber, and don't we need to ((|ruby_xfree|)) the ((|fib|)) itself?

The attached patch is made against ruby_1_9_2 branch; trunk seems to have the segfault behavior too.

=end



-- 
http://redmine.ruby-lang.org

In This Thread