[#23457] [Bug #1471] "Mutual join" deadlock detection faulty in 1.8.6 and 1.8.7 — John Carter <redmine@...>

Bug #1471: "Mutual join" deadlock detection faulty in 1.8.6 and 1.8.7

17 messages 2009/05/15

[#23483] [Bug #1478] Ruby archive — Oleg Puchinin <redmine@...>

Bug #1478: Ruby archive

29 messages 2009/05/16
[#29225] [Feature #1478] Ruby archive — Luis Lavena <redmine@...> 2010/04/02

Issue #1478 has been updated by Luis Lavena.

[#30345] Re: [Feature #1478] Ruby archive — "NAKAMURA, Hiroshi" <nakahiro@...> 2010/05/21

On Fri, Apr 2, 2010 at 17:13, Luis Lavena <redmine@ruby-lang.org> wrote:

[#30346] Re: [Feature #1478] Ruby archive — Jonathan Nielsen <jonathan@...> 2010/05/21

> Thanks for your comment.

[#30347] Re: [Feature #1478] Ruby archive — Jonathan Nielsen <jonathan@...> 2010/05/21

OK Hiroshi, I read some of the comments earlier in the thread that I

[#30355] Re: [Feature #1478] Ruby archive — Caleb Clausen <vikkous@...> 2010/05/21

On 5/20/10, Jonathan Nielsen <jonathan@jmnet.us> wrote:

[#30364] Re: [Feature #1478] Ruby archive — Benoit Daloze <eregontp@...> 2010/05/22

Hi,

[#23505] [Bug #1494] tempfile#unlink may silently fail on windows — Nicholas Manning <redmine@...>

Bug #1494: tempfile#unlink may silently fail on windows

19 messages 2009/05/19

[#23572] [Bug #1525] Deadlock in Ruby 1.9's VM caused by ConditionVariable.wait and fork? — Hongli Lai <redmine@...>

Bug #1525: Deadlock in Ruby 1.9's VM caused by ConditionVariable.wait and fork?

27 messages 2009/05/27

[#23595] Meaning of RUBY_PLATFORM — Rick DeNatale <rick.denatale@...>

The RUBY_PLATFORM constant is documented in the latest Pickaxe as "The

17 messages 2009/05/28
[#23596] Re: Meaning of RUBY_PLATFORM — Luis Lavena <luislavena@...> 2009/05/28

On Thu, May 28, 2009 at 3:41 PM, Rick DeNatale <rick.denatale@gmail.com> wrote:

[#23602] Re: Meaning of RUBY_PLATFORM — Rick DeNatale <rick.denatale@...> 2009/05/28

On Thu, May 28, 2009 at 2:52 PM, Luis Lavena <luislavena@gmail.com> wrote:

[#23608] Re: Meaning of RUBY_PLATFORM — Luis Lavena <luislavena@...> 2009/05/28

On Thu, May 28, 2009 at 7:08 PM, Rick DeNatale <rick.denatale@gmail.com> wrote:

[#23609] Re: Meaning of RUBY_PLATFORM — Rick DeNatale <rick.denatale@...> 2009/05/29

On Thu, May 28, 2009 at 7:22 PM, Luis Lavena <luislavena@gmail.com> wrote:

[ruby-core:23456] REXML Thread Safety

From: Weston Sewell <weston.sewell@...>
Date: 2009-05-15 07:37:56 UTC
List: ruby-core #23456
I've been using Ruby for several years but I just joined the list because I
ran into a problem that I'm not sure how to solve (sorry for not lurking for
the requisite eon, I've been working night and day on a Ruby project for
work).

It appears that REXML may not be completely thread-safe. Is it intended to
be? I've run into a problem that I was able to reproduce in a test that I'll
post at the bottom. Basically, it appears that accessing either #to_s or
#value on REXML::Attribute causes a change in the state of the instance
(setting @normalized and @unnormalized to a computed value or 'nil'). And
since these are not intended to be "destructive" calls, neither are some of
the Element methods that call them (i.e. Element#inspect). When using
threads of course we are not protecting non-destructive calls with semaphors
(and actually we are using XMPP4r so we don't have complete conrol over what
gets called and how).

Is there anyone who is familiar with this situation?

TIA
Weston

Test Code  - exception occurs in either #to_s or #value (on my system this
always happens within 900 iterations)
------------------------------------------------------------------------------
common_doc = REXML::Document.new( '<foo bar="somevalue" />' )

def parse(doc)
    foo = doc.root
    foo.inspect
    foo.attributes['bar']
end

def multiparse(doc)
    1000000.times do |iteration|
        puts "Iteration #{iteration}" if(iteration == 0 || (iteration % 100
== 0))
        parse(doc)
    end
end

threads = []
threads << Thread.new { multiparse(common_doc) }
threads << Thread.new { multiparse(common_doc) }
threads << Thread.new { multiparse(common_doc) }
threads << Thread.new { multiparse(common_doc) }
threads << Thread.new { multiparse(common_doc) }
threads << Thread.new { multiparse(common_doc) }

threads.each do |thread|
    thread.join
end

In This Thread

Prev Next