[#30995] [Bug #3523] win32 exception c0000029 on exit using fibers — B Kelly <redmine@...>

Bug #3523: win32 exception c0000029 on exit using fibers

19 messages 2010/07/02

[#31100] [rubysoc] Queue C-extension patch to come — Ricardo Panaggio <panaggio.ricardo@...>

Hello,

26 messages 2010/07/07
[#31148] Re: [rubysoc] Queue C-extension patch to come — Roger Pack <rogerdpack2@...> 2010/07/09

> As this it my first patch to Ruby, I don't know where to begin with.

[#31320] Re: [rubysoc] Queue C-extension patch to come — Ricardo Panaggio <panaggio.ricardo@...> 2010/07/16

Sorry for leaving this thread for so long. I've tried to finish the

[#31322] Re: [rubysoc] Queue C-extension patch to come — Aaron Patterson <aaron@...> 2010/07/16

On Sat, Jul 17, 2010 at 06:55:35AM +0900, Ricardo Panaggio wrote:

[#31324] Re: [rubysoc] Queue C-extension patch to come — Caleb Clausen <vikkous@...> 2010/07/17

NB: I am Ricardo's mentor for this project.

[#31331] Re: [rubysoc] Queue C-extension patch to come — Benoit Daloze <eregontp@...> 2010/07/17

On 17 July 2010 06:00, Caleb Clausen <vikkous@gmail.com> wrote:

[#31332] Re: [rubysoc] Queue C-extension patch to come — Caleb Clausen <vikkous@...> 2010/07/17

On 7/17/10, Benoit Daloze <eregontp@gmail.com> wrote:

[#31138] Why is there no standard way of creating a String from a char *? — Nikolai Weibull <now@...>

Hi!

14 messages 2010/07/08
[#31146] Re: Why is there no standard way of creating a String from a char *? — Urabe Shyouhei <shyouhei@...> 2010/07/09

(2010/07/09 7:04), Nikolai Weibull wrote:

[#31149] Re: Why is there no standard way of creating a String from a char *? — Nikolai Weibull <now@...> 2010/07/09

On Fri, Jul 9, 2010 at 06:20, Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:

[#31150] Re: Why is there no standard way of creating a String from a char *? — Urabe Shyouhei <shyouhei@...> 2010/07/09

(2010/07/09 18:28), Nikolai Weibull wrote:

[#31217] [Bug #3562] regression in respond_to? — Aaron Patterson <redmine@...>

Bug #3562: regression in respond_to?

14 messages 2010/07/12

[#31269] [Bug #3566] memory leak when spawning+joining Threads in a loop — Eric Wong <redmine@...>

Bug #3566: memory leak when spawning+joining Threads in a loop

14 messages 2010/07/13

[#31399] [Backport #3595] Theres no encoding to differentiate a stream of Binary data from an 8-Bit ASCII string — Dreamcat Four <redmine@...>

Backport #3595: Theres no encoding to differentiate a stream of Binary data from an 8-Bit ASCII string

17 messages 2010/07/21

[#31459] [Bug #3607] [trunk/r28731] Gem.path has disappeared? — Ollivier Robert <redmine@...>

Bug #3607: [trunk/r28731] Gem.path has disappeared?

22 messages 2010/07/23

[#31519] [Bug #3622] Net::HTTP does not wait to send request body with Expect: 100-continue — Eric Hodel <redmine@...>

Bug #3622: Net::HTTP does not wait to send request body with Expect: 100-continue

9 messages 2010/07/28

[ruby-core:31457] Re: [Bug #3606] Thread.stop and puts fail to work as documented.

From: James Tucker <jftucker@...>
Date: 2010-07-23 13:23:04 UTC
List: ruby-core #31457
On 23 Jul 2010, at 05:55, Heesob Park wrote:
> on Ruby 1.8.6
> 
> 	$ ruby -v
> 	ruby 1.8.6 (2009-06-08 patchlevel 369) [i686-linux]
> 	$ ruby -v t1.rb
> 	a
> 	Got here
> 	c
> 	$ ruby -v t2.rb
> 	abc$ ruby -v t3.rb
> 	hey!
> 	$
> 
> Result
> 	t1.rb ==> success
> 	t2.rb ==> success
> 	t3.rb ==> success

This is because threads in 1.8.6 are not really threads. The engine is predictable within the realms of ruby frames.

> on Ruby 1.9.1
> 
> 	$ ruby -v
> 	ruby 1.9.1p378 (2010-01-10 revision 26273) [i686-linux]
> 	$ ruby t1.rb
> 	aGot here
> 
> 	c
> 	$ ruby t2.rb
> 	$ ruby t3.rb
> 	$
> 	
> Result
> 	t1.rb ==> fail
> 	t2.rb ==> success
> 	t3.rb ==> fail

This could, or should vary, actually. The example code is not thread safe.

> On Ruby 1.9.3dev
> 
> 	duometis02@Duo02:~$ ruby -v
> 	ruby 1.9.3dev (2010-07-22 trunk 28707) [i686-linux]
> 	$ ruby t1.rb
> 	Got herea
> 
> 	t1.rb:5:in `join': deadlock detected (fatal)
> 		from t1.rb:5:in `<main>'
> 	$ ruby t2.rb
> 	bat2.rb:5:in `join': deadlock detected (fatal)
> 		from t2.rb:5:in `<main>'
> 	$ ruby t3.rb
> 	$

So what's happening here is that you're getting to thread.join before the other thread has got to thread.stop. This is a race condition in your code. Threads are hard, and it's regarded that tools like stop, run, join, and pass are very very hard to use in a thread safe way. Assuming that calling Thread.pass with force at least a single expression to run in another thread is not valid.

> Interesingly, the following code sometimes works and sometimes failed on Ruby 1.9.3.dev.
> t4.rb
> ====================================================
> c = Thread.new { Thread.stop; puts "hey!" }
> puts "Hi!"
> c.wakeup
> sleep 1
> ====================================================
> $ ruby -v
> ruby 1.9.3dev (2010-07-22 trunk 28707) [i686-linux]
> $ ruby t4.rb
> Hi!
> $ ruby t4.rb
> Hi!
> hey!
> $ ruby t4.rb
> Hi!
> hey!
> $ ruby t4.rb
> Hi!

As above, this is a race condition. If c.wakeup is called before Thread.stop, then the code will never restart the thread after it stops itself. This is an error in the code, not in the interpreter.

In This Thread