[#54738] [ruby-trunk - Bug #8358][Open] TestSprintf#test_float test failuer on mingw32 — "phasis68 (Heesob Park)" <phasis@...>

36 messages 2013/05/02

[#54749] [ruby-trunk - Feature #8361][Open] Alternative syntax for block parameter — "alexeymuranov (Alexey Muranov)" <redmine@...>

12 messages 2013/05/02

[#54798] [ruby-trunk - Bug #8370][Open] Constants MAX_MULTIPART_LENGTH in cgi\core.rb — "xibbar (Takeyuki FUJIOKA)" <xibbar@...>

17 messages 2013/05/05

[#54850] [ruby-trunk - Feature #8377][Open] Deprecate :: for method calls in 2.1 — "charliesome (Charlie Somerville)" <charliesome@...>

27 messages 2013/05/07

[#54881] [ruby-trunk - Bug #8384][Open] Cannot build ruby against OpenSSL build with "no-ec2m" — "vo.x (Vit Ondruch)" <v.ondruch@...>

16 messages 2013/05/09

[#54921] [ruby-trunk - Bug #8393][Open] A class who's parent class is in a module can go wrong if files are required in the wrong order — "eLobato (Daniel Lobato Garcia)" <elobatocs@...>

15 messages 2013/05/12

[#54939] [ruby-trunk - Bug #8399][Open] Remove usage of RARRAY_PTR in C extensions when not needed — "dbussink (Dirkjan Bussink)" <d.bussink@...>

32 messages 2013/05/12

[#55053] [ruby-trunk - Feature #8426][Open] Implement class hierarchy method caching — "charliesome (Charlie Somerville)" <charliesome@...>

21 messages 2013/05/19

[#55096] [ruby-trunk - Feature #8430][Open] Rational number literal — "mrkn (Kenta Murata)" <muraken@...>

28 messages 2013/05/21

[#55197] [ruby-trunk - Feature #8461][Open] Easy way to disable certificate checking in XMLRPC::Client — "herwinw (Herwin Weststrate)" <herwin@...>

11 messages 2013/05/29

[ruby-core:55153] [ruby-trunk - Bug #8444][Open] Regexp vars $~ and friends are not thread local

From: "jamespharaoh (James Pharaoh)" <james@...>
Date: 2013-05-24 09:15:19 UTC
List: ruby-core #55153
Issue #8444 has been reported by jamespharaoh (James Pharaoh).

----------------------------------------
Bug #8444: Regexp vars $~ and friends are not thread local
https://bugs.ruby-lang.org/issues/8444

Author: jamespharaoh (James Pharaoh)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: trunk
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


=begin
In the docs for the Regexp special variables, $~ and friends, it says "These global variables are thread-local and method-local variables". However the following gives an unexpected result:

  def get_proc
    proc do |str|
      str =~ /(.+)/
      sleep 0.1
      puts "got #{$1} from #{str}\n"
    end
  end
  proc = get_proc
  t1 = Thread.new { proc.call "abc" }
  t2 = Thread.new { proc.call "def" }
  t1.join
  t2.join

This outputs the following:

  got abc from abc
  got abc from def

The expected result is of course:

  got abc from abc
  got def from def

Clearly the variables are being scoped to the get_proc method and are being shared by both threads. This runs contrary to the documentation and also to expectations.

This behaviour should either be changed, or the documentation updated to reflect the actual behaviour.

Interestingly, the following does work as expected:

  proc = proc do |str|
    str =~ /(.+)/
    sleep 0.1
    puts "got #{$1} from #{str}\n"
  end
  t1 = Thread.new { proc.call "abc" }
  t2 = Thread.new { proc.call "def" }
  t1.join
  t2.join

=end


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

In This Thread

Prev Next