Project

General

Profile

« Previous | Next » 

Revision 74dcc22c

Added by shyouhei (Shyouhei Urabe) almost 13 years ago

  • variable.c (rb_autoload_load): There is a race condition while
    autoloading. When two or more threads touch a single autoloaded
    constant at a time, one of them does the require, but others
    behave oddly. To fix this situation we now refrain from
    deleting the autoload table while someone is doing the autoload.
    That deletion is deferred to a point where a require ended
    successfully. Doing so make it possible for multiple threads to
    enter autoloading at the same time but the require is protected
    against multiple simultaneous entrance anyway so all but one
    thread gets blocked at that point. So with it, touching a
    constant that gets autoloaded cause those threads to block until
    there is another one that does the same thing.
    [ruby-core:36308] (#921)

  • variable.c (rb_const_get_0): ditto.

  • variable.c (autoload_node): ditto.

  • variable.c (autoload_delete): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@31732 b2dd03c8-39d4-4d8f-98ff-823fe69b080e