ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: normalperson@yhbt.net
To: ruby-core@ruby-lang.org
Subject: [ruby-core:81130] [Ruby trunk Bug#11384] multi-threaded autoload sometimes fails
Date: Fri, 12 May 2017 21:51:31 +0000	[thread overview]
Message-ID: <redmine.journal-64779.20170512215131.39651c418ef813d4@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-11384.20150722005813@ruby-lang.org

Issue #11384 has been updated by normalperson (Eric Wong).

File 0001-autoload-always-wait-on-loading-thread.patch added
Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: REQUIRED, 2.4: REQUIRED

I think the attached patch should fix it, over 12 million iterations
and still going strong.


----------------------------------------
Bug #11384: multi-threaded autoload sometimes fails
https://bugs.ruby-lang.org/issues/11384#change-64779

* Author: normalperson (Eric Wong)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: trunk r51319
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: REQUIRED, 2.4: REQUIRED
----------------------------------------
~~~
I get this failure once in a blue moon:

#8 test_autoload.rb:46:in `<top (required)>':
     open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
     autoload :ZZZ, "./zzz.rb"
     t1 = Thread.new {ZZZ.ok}
     t2 = Thread.new {ZZZ.ok}
     [t1.value, t2.value].join
  #=> "" (expected "okok")
stderr output is not empty
   bootstraptest.tmp.rb:5:in `block in <main>': uninitialized constant ZZZ (Name
+Error)
test_autoload.rb        FAIL 1/8
FAIL 1/1010 tests failed


It is a very rare failure, I extracted it into a standalone script and
it took over 500,000 runs to hit it:

unless test(?e, "zzz.rb")
  open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
end
autoload :ZZZ, "./zzz.rb"
t1 = Thread.new {ZZZ.ok}
t2 = Thread.new {ZZZ.ok}
[t1.value, t2.value].join
~~~

I'll work on this when I find time, but maybe somebody else can look at it
sooner.  I'm not sure if it affects older versions.


---Files--------------------------------
0001-autoload-always-wait-on-loading-thread.patch (1.96 KB)


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

  parent reply	other threads:[~2017-05-12 21:07 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-11384.20150722005813@ruby-lang.org>
2015-07-22  0:58 ` [ruby-core:70075] [Ruby trunk - Bug #11384] [Open] multi-threaded autoload sometimes fails normalperson
2015-10-28  5:54 ` [ruby-core:71239] [Ruby trunk - Bug #11384] " shugo
2015-10-28  9:03   ` [ruby-core:71241] " Eric Wong
2015-10-28 23:14   ` [ruby-core:71256] " Eric Wong
2015-10-28 23:49     ` [ruby-core:71257] " Eric Wong
2015-10-29  2:09 ` [ruby-core:71258] " shugo
2015-11-03  3:33   ` [ruby-core:71305] " Eric Wong
2017-05-11 23:43 ` [ruby-core:81105] [Ruby trunk Bug#11384][Open] " s.wanabe
2017-05-12  0:01   ` [ruby-core:81106] " Eric Wong
2017-05-12 21:51 ` normalperson [this message]
2017-06-30 10:56 ` [ruby-core:81853] [Ruby trunk Bug#11384] " usa
2017-07-09 20:46 ` [ruby-core:81984] " nagachika00

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-64779.20170512215131.39651c418ef813d4@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).