[#38647] [Ruby 1.9 - Bug #5130][Open] Thread.pass sticks on OpenBSD — Yui NARUSE <naruse@...>
[#38653] [Ruby 1.9 - Bug #5135][Open] Ruby 1.9.3-preview1 tests fails in Fedora Rawhide — Vit Ondruch <v.ondruch@...>
2011/8/4 Vit Ondruch <v.ondruch@tiscali.cz>:
[#38666] [Ruby 1.9 - Bug #5138][Open] Add nonblocking IO that does not use exceptions for EOF and EWOULDBLOCK — Yehuda Katz <wycats@...>
On Tue, Aug 02, 2011 at 07:35:15AM +0900, Yehuda Katz wrote:
(08/02/2011 07:46 AM), Aaron Patterson wrote:
Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:
(08/02/2011 08:14 AM), Eric Wong wrote:
Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:
(08/02/2011 08:35 AM), Eric Wong wrote:
Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:
2011/8/2 Eric Wong <normalperson@yhbt.net>:
2011/8/2 Tanaka Akira <akr@fsij.org>:
Yehuda Katz <wycats@gmail.com> wrote:
Yehuda Katz
On Tue, Aug 02, 2011 at 07:35:15AM +0900, Yehuda Katz wrote:
2011/8/2 Yehuda Katz <wycats@gmail.com>:
Yehuda Katz <wycats@gmail.com> wrote:
"tenderlovemaking (Aaron Patterson)" <aaron@tenderlovemaking.com> wrote:
On Wed, Jul 10, 2013 at 09:03:19AM +0900, Eric Wong wrote:
Aaron Patterson <tenderlove@ruby-lang.org> wrote:
On Wed, Jul 10, 2013 at 10:52:26AM +0900, Eric Wong wrote:
[#38695] [Ruby 1.9 - Bug #5144][Open] Remove GPL file from repository — Vit Ondruch <v.ondruch@...>
[#38706] [Ruby 1.9 - Bug #5147][Open] mkmf should not require static library when ruby is built with --enable-shared — Vit Ondruch <v.ondruch@...>
[#38831] Help out with the next version of ruby-lang.org — Magnus Holm <judofyr@...>
https://github.com/rubylang/ruby-lang.org
Great news! Congratulations for the initiative!
Just wondering why is it not under https://github.com/ruby account,
[#38866] [Ruby 1.9 - Bug #5173][Open] [PATCH] json/generator: prevent GC of temporary strings — Eric Wong <normalperson@...>
[#38881] Init_prelude gone in 1.9.3 — Christoph Kappel <unexist@...>
Dear list,
[#38894] Why Ruby has versioned paths? — V咜 Ondruch <v.ondruch@...>
Hello, could somebody please elaborate about reasons why Ruby uses versioned
2011/8/10 V鱈t Ondruch <v.ondruch@gmail.com>
2011/8/10 Michael Klishin <michael.s.klishin@gmail.com>
2011/8/10 V鱈t Ondruch <v.ondruch@gmail.com>
[#38911] [Ruby 1.9 - Feature #5183][Open] [PATCH] openssl: add OP_NO_COMPRESSION constant — Eric Wong <normalperson@...>
[#38972] [Ruby 1.9 - Bug #5193][Open] ruby_thread_data_type linker errors fixed with RUBY_EXTERN — Charlie Savage <cfis@...>
[#38980] :symbol.is_a?(String) — Magnus Holm <judofyr@...>
http://viewsourcecode.org/why/redhanded/inspect/SymbolIs_aString.html
What would ObjectSpace.each_object(String) { |o| p o } produce?
On Tue, Aug 16, 2011 at 17:01, Haase, Konstantin
This would only be feasible if frozen strings would truly be frozen. Currently, there are a lot of C extensions modifying frozen strings (which is why Rubinius and JRuby have to treat frozen strings as mutable). Unfortunately, the current C API gives access to the raw character array, making it impossible to prevent frozen strings from being modified. What if a cached, frozen string is modified? Also, I see it as a feature of symbols that they are not encoding aware.
[#39000] [Ruby 1.9 - Bug #5199][Open] ext/tk: RB_GC_GUARD seems to be needed in several places — Eric Wong <normalperson@...>
[#39022] [Ruby 1.9 - Bug #5204][Open] `defined?(@@foo) && @foo` may fail — Magnus Holm <judofyr@...>
[#39025] [Ruby 1.9 - Feature #5206][Open] ruby -K should warn — Eric Hodel <drbrain@...7.net>
[#39062] Releasing r33028 as Ruby 1.9.3 RC1 — Yugui <yugui@...>
Hi,
Hi,
Hi
On Sat, Sep 3, 2011 at 12:14 AM, KOSAKI Motohiro
> We are still suffering from a sample/test.rb failure for system(),
[#39079] [Ruby 1.9 - Feature #5221][Open] LoadEerror#path — Koichi Sasada <redmine@...>
[#39093] [Ruby 1.9 - Bug #5227][Open] Float#round fails on corner cases — Marc-Andre Lafortune <ruby-core@...>
Hi
(2011/08/27 4:40), Marc-Andre Lafortune wrote:
Hi,
2011/8/29 Marc-Andre Lafortune <ruby-core-mailing-list@marc-andre.ca>:
Hi,
[#39118] [Ruby 1.9 - Bug #921] autoload is not thread-safe — Hiroshi Nakamura <nakahiro@...>
[#39120] [Ruby 1.9 - Bug #5233][Open] OpenSSL::SSL::SSLSocket has problems with encodings other than "ascii" — Niklas Baumstark <niklas.baumstark@...>
[#39134] [Ruby 1.9 - Bug #5237][Open] IO.copy_stream calls #read on an object infinitely many times — Brian Ford <brixen@...>
On Sat, Aug 27, 2011 at 3:54 AM, Eric Wong <normalperson@yhbt.net> wrote:
[#39142] [Ruby 1.9 - Bug #5239][Open] bootstraptest/runner.rb: assert_normal_exit logic broken on Debian/GNU kFreeBSD — Lucas Nussbaum <lucas@...>
> I've just checked, and FreeBSD 8.2 is also affected by this issue.
On 29/08/11 at 12:43 +0900, KOSAKI Motohiro wrote:
[#39146] [Ruby 1.9 - Bug #5240][Open] Hang when using threads + forks on Debian GNU/kFreeBSD — Lucas Nussbaum <lucas@...>
[#39162] [Ruby 1.9 - Bug #5244][Open] Continuation causes Bus Error on Debian sparc — Lucas Nussbaum <lucas@...>
[#39184] [Ruby 1.9 - Bug #1792][Closed] Fixnum#& 等が、Rational などを受けつける — Kenta Murata <muraken@...>
Is it intentional?
[#39195] [Ruby 1.9 - Bug #5251][Open] Thread Change Breaks Windows Builds — Charlie Savage <cfis@...>
[#39216] [Ruby 1.9 - Bug #5253][Open] PTY with wait incorrectly sets exit status for exit command — Simon Chiang <simon.a.chiang@...>
[ruby-core:39118] [Ruby 1.9 - Bug #921] autoload is not thread-safe
Issue #921 has been updated by Hiroshi Nakamura. =begin Here's the updated patch: [https://github.com/nahi/ruby/compare/11667b9c...03ddf439] Summary * ((*What's the problem?*)) autoload is thread unsafe. When we define a constant to be autoloaded, we expect the constant construction is invariant. But current autoload implementation allows other threads to access the constant while the first thread is loading a file. See http://prezi.com/ff9yptxhohjz/making-autoload-thread-safe/ for an example. * ((*What's happening inside?*)) The current implementation uses Qundef as a marker of autoload in Constant table. Once the first thread find Qundef as a value at constant lookup, it starts loading a defined feature. Generally a loaded file overrides the Qundef in Constant table by module/class declaration at very beginning lines of the file, so other threads can see the new Module/Class object before feature loading is finished. It breaks invariant construction. * ((*How to solve?*)) To ensure invariant constant construction, we need to override Qundef with defined Object after the feature loading. For keeping Qundef in Constant table, I expanded autoload_data struct in Module to have a slot for keeping the defined object while feature loading. And changed Module's constant lookup/update logic a little so that the slot is only visible from the thread which invokes feature loading. (== the first thread which accessed the autoload constant) * ((*Evaluation?*)) All test passes (bootstrap test, test-all and RubySpec) and added 8 tests for threading behavior. Extra logics are executed only when Qundef is found, so no perf drop should happen except autoloading. I'll commit this soon. Committers, please evaluate this. =end ---------------------------------------- Bug #921: autoload is not thread-safe http://redmine.ruby-lang.org/issues/921 Author: Charles Nutter Status: Open Priority: Normal Assignee: Hiroshi Nakamura Category: core Target version: 1.9.x ruby -v: ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux] =begin Currently autoload is not safe to use in a multi-threaded application. To put it more bluntly, it's broken. The current logic for autoload is as follows: 1. A special object is inserted into the target constant table, used as a marker for autoloading 2. When that constant is looked up, the marker is found and triggers autoloading 3. The marker is first removed, so the constant now appears to be undefined if retrieved concurrently 4. The associated autoload resource is required, and presumably redefines the constant in question 5. The constant lookup, upon completion of autoload, looks up the constant again and either returns its new value or proceeds with normal constant resolution The problem arises when two or more threads try to access the constant. Because autoload is stateful and unsynchronized, the second thread may encounter the constant table in any number of states: 1. It may see the autoload has not yet fired, if the first thread has encountered the marker but not yet removed it. It would then proceed along the same autoload path, requiring the same file a second time. 2. It may not find an autoload marker, and assume the constant does not exist. 3. It may see the eventual constant the autoload was intended to define. Of these combinations, (3) is obviously the desired behavior. (1) can only happen on native-threaded implementations that do not have a global interpreter lock, since it requires concurrency during autoload's internal logic. (2) can happen on any implementation, since while the required file is processing the original autoload constant appears to be undefined. I have only come up with two solutions: * When the autoload marker is encountered, it is replaced (under lock) with an "autoload in progress" marker. All subsequent threads will then see this marker and wait for the autoloading process to complete. the mechanics of this are a little tricky, but it would guarantee concurrent autoloads would only load the target file once and would always return the intended value to concurrent readers. * A single autoload mutex, forcing all autoloads to happen in serial. There is a potential for deadlock in the first solution, unfortunately, since two threads autoloading two constants with circular autoloaded constant dependencies would ultimately deadlock, each waiting for the other to complete. Because of this, a single autoload mutex for all autoloads may be the only safe solution. =end -- http://redmine.ruby-lang.org