[#40602] [ruby-trunk - Bug #5532][Open] Compile problem for bigdecimal on cygwin — Martin Dürst <duerst@...>

14 messages 2011/11/01

[#40617] [ruby-trunk - Feature #5534][Open] Redefine Range class and introduce RelativeNumeric and RelativeRange — Alexey Muranov <muranov@...>

17 messages 2011/11/01

[#40646] [ruby-trunk - Bug #5541][Open] Better configure error message when llvm-gcc is the default compiler — Eric Hodel <drbrain@...7.net>

10 messages 2011/11/01

[#40648] [ruby-trunk - Feature #5543][Open] rb_thread_blocking_region() API is poorly designed — Christopher Huff <cjameshuff@...>

14 messages 2011/11/01

[#40684] [ruby-trunk - Feature #5555][Open] rename #include? to #includes? — Alexey Muranov <muranov@...>

20 messages 2011/11/02

[#40688] [ruby-trunk - Bug #5556][Open] SIGHUP no longer ignored when sent to process group from a subprocess — Brian Ford <brixen@...>

12 messages 2011/11/02

[#40706] [ruby-trunk - Feature #5562][Open] Improvement of Windows IO performance — Hiroshi Shirosaki <h.shirosaki@...>

39 messages 2011/11/03

[#40737] [ruby-trunk - Bug #5570][Open] Encoding of environment variables on Windows — Nikolai Weibull <now@...>

11 messages 2011/11/04

[#40748] Proposal for sustainable branch maintenance — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

14 messages 2011/11/05

[#40770] [ruby-trunk - Feature #5578][Open] Embedded YAML for Ruby 2.0 — Thomas Sawyer <transfire@...>

17 messages 2011/11/06

[#40806] [ruby-trunk - Feature #5583][Open] Optionally typing — Yasushi ANDO <andyjpn@...>

21 messages 2011/11/07

[#40824] [ruby-trunk - Feature #5588][Open] add negation flag (v) to Regexp — Suraj Kurapati <sunaku@...>

38 messages 2011/11/08

[#40865] IO.copy_stream creates files with restrictive permissions — Eric Wong <normalperson@...>

I'm not sure if this is a bug or intended as spec.

16 messages 2011/11/09
[#41151] Re: IO.copy_stream creates files with restrictive permissions — Tanaka Akira <akr@...> 2011/11/19

2011/11/9 Eric Wong <normalperson@yhbt.net>:

[#41166] Re: IO.copy_stream creates files with restrictive permissions — KOSAKI Motohiro <kosaki.motohiro@...> 2011/11/20

>> I noticed when a file name argument is passed to the IO.copy_stream, the

[#41168] Re: IO.copy_stream creates files with restrictive permissions — Clifford Heath <clifford.heath@...> 2011/11/20

On 20/11/2011, at 5:09 PM, KOSAKI Motohiro wrote:

[#41176] Re: IO.copy_stream creates files with restrictive permissions — Tanaka Akira <akr@...> 2011/11/21

2011/11/20 Clifford Heath <clifford.heath@gmail.com>:

[#41180] Re: IO.copy_stream creates files with restrictive permissions — KOSAKI Motohiro <kosaki.motohiro@...> 2011/11/21

>> I think documentation is the wrong answer. The security defects are not caused

[#40908] [ruby-trunk - Feature #5607][Open] Inconsistent reaction in Range of String — Yen-Nan Lin <redmine@...>

15 messages 2011/11/10

[#40941] [ruby-trunk - Feature #5617][Open] Allow install RubyGems into dediceted directory — Vit Ondruch <v.ondruch@...>

22 messages 2011/11/11

[#40951] [Backport93 - Backport #5621][Open] Please backport thread-safe autoloading patch — Mike Perham <mperham@...>

25 messages 2011/11/12
[#40971] [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Mike Perham <mperham@...> 2011/11/12

[#40972] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Yehuda Katz <wycats@...> 2011/11/12

Unfortunately ruby-head has a deadlock in one of my go-to scenarios for

[#40976] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Hiroshi Nakamura <nahi@...> 2011/11/13

-----BEGIN PGP SIGNED MESSAGE-----

[#41128] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Charles Oliver Nutter <headius@...> 2011/11/18

On Sat, Nov 12, 2011 at 7:24 PM, Hiroshi Nakamura <nahi@ruby-lang.org> wrote:

[#41129] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Hiroshi Nakamura <nahi@...> 2011/11/18

-----BEGIN PGP SIGNED MESSAGE-----

[#41142] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch — Charles Oliver Nutter <headius@...> 2011/11/18

On Fri, Nov 18, 2011 at 12:15 AM, Hiroshi Nakamura <nahi@ruby-lang.org> wro=

[#40982] [ruby-trunk - Bug #5625][Open] Remove profanity and pejoratives — Andrew Grimm <andrew.j.grimm@...>

30 messages 2011/11/13

[#41004] [ruby-trunk - Feature #5628][Open] Module#basename — Thomas Sawyer <transfire@...>

18 messages 2011/11/14

[#41024] [ruby-trunk - Feature #5632][Open] Attempt to open included class shades it instead. — Boris Stitnicky <boris@...>

12 messages 2011/11/14

[#41025] Proposal to add new methods: positive? negative? natural? — JosFrancisco Calvo Moreno <josefranciscocalvo@...>

Hi all!

11 messages 2011/11/14
[#41027] Re: Proposal to add new methods: positive? negative? natural? — Jeremy Evans <code@...> 2011/11/14

On 11/15 12:58, Jos? Francisco Calvo Moreno wrote:

[#41031] Re: Proposal to add new methods: positive? negative? natural? — JosFrancisco Calvo Moreno <josefranciscocalvo@...> 2011/11/14

Hi Jeremy,

[#41038] [ruby-trunk - Bug #5634][Open] yield and binding — Thomas Sawyer <transfire@...>

17 messages 2011/11/14

[#41086] [ruby-trunk - Feature #5644][Open] add Enumerable#exclude? antonym — Suraj Kurapati <sunaku@...>

14 messages 2011/11/17

[#41175] [ruby-trunk - Feature #5654][Open] Introduce global lock to avoid concurrent require — Hiroshi Nakamura <nakahiro@...>

12 messages 2011/11/21

[#41200] [ruby-trunk - Bug #5659][Open] bug releasing a gem created with rails 3.1 — Vinicius Gati <viniciusgati@...>

14 messages 2011/11/22

[#41212] [ruby-trunk - Feature #5662][Open] inject-accumulate, or Haskell's mapAccum* — Edvard Majakari <edvard.majakari@...>

12 messages 2011/11/22

[#41213] [ruby-trunk - Bug #5663][Open] Combined map/select method — Yehuda Katz <wycats@...>

62 messages 2011/11/22

[#41317] [ruby-trunk - Bug #5676][Open] miniruby linking error: undefined reference to ___stack_chk_guard — Martin Dürst <duerst@...>

10 messages 2011/11/27

[#41404] [ruby-trunk - Bug #5690][Open] Module#qualified_const_get — Yehuda Katz <wycats@...>

31 messages 2011/11/30

[ruby-core:41403] Re: [Backport93 - Backport #5621] Please backport thread-safe autoloading patch

From: Yehuda Katz <wycats@...>
Date: 2011-11-30 02:41:57 UTC
List: ruby-core #41403
Yehuda Katz
(ph) 718.877.1325


On Tue, Nov 29, 2011 at 2:43 AM, Charles Oliver Nutter
<headius@headius.com>wrote:

> On Mon, Nov 21, 2011 at 4:18 AM, Hiroshi Nakamura <nahi@ruby-lang.org>
> wrote:
> > I see.  Maybe I misunderstood 'a single lock' concept of 1).  1) is not
> > needed, and 2) should be enough for safe classloading normally.
> > Initialization of classes (and interfaces) are defined in JLS[1]
> > carefully, and no deadlock occurred in normal classloading scheme
> > (parent to child.)
> >
> > Customized classloader can cause a deadlock, and Java SE 7 introduced a
> > manual way to avoid this for classloader developer.
> >
> > [1]
> >
> http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.4.2
> > [2]
> http://docs.oracle.com/javase/7/docs/technotes/guides/lang/cl-mt.html
>
> Yes, custom classloaders that delegate in odd ways (cross-hierarchy,
> where you have crossing child/parent relationships) could certainly
> deadlock. It was a bit of an odd situation, though, since normally
> classloaders follow a normal child/parent relationship and just go up
> a hierarchy. For the cases where you need to do this more complicated
> loading, it looks like they've fixed the locking to consider both the
> class under load and the classloader loading it, so you don't end up
> with a deadlock.
>
> > Sure. We cannot control code execution order of initializers (that's
> > just a chunk of code in Ruby) and deadlock is inherently unavoidable if
> > developer writes a 'wrong code' such as;
> ...
> > As the existing warning 'circular require considered harmful', current
> > Ruby treats it as a developer's job to avoid this 'wrong code'.  I was
> > trying to solve threading issues of require and autoload, and I think we
> > solved it at #921 unless developers don't write 'wrong code'.
> >
> > I understand that Yehuda and you are saying that it's not a 'wrong
> > code.'  It's hard to define 'wrong code' I agree.  I still wanna see
> > concrete examples which are not 'wrong code' but I think it's OK to fix
> > the issue inherently by introducing global (per VM) file loading lock if
> > it doesn't cause serious degradation in 2.0.
> >
> > Isn't there an application which uses Threads + parallel execution by
> > "load" method?  I don't have concrete example :)
>
> You replied later that you meant "require" not "load". I think
> Yehuda's case is not too exotic, and could conceivably happen. For the
> simple case of two threads autoloading at the same time, if autoload
> being made single-threaded (single global lock for all autoloads)
> would be enough. If autoloads and normal requires fire at the same
> time, however, it could still deadlock. This would happen if an
> autoload executes concurrently with another normal require. That's a
> bit more exotic.
>
> I'm stil at a loss to describe a scenario where parallel 'require' is
> what you *want* to happen, but I recognize it would be a visible
> change from today.
>

If you have to choose between making requires threadsafe and enabling
parallel requires, making requires threadsafe clearly wins.


>
> >> I think we could claim autoload is thread-safe in itself if it always
> >> just used a single lock. In other words, only one thread can be
> >> processing autoloads at a time. This doesn't fix the parallel require
> >> issue, but it would fix parallel autoloading.
> >>
> >> I think that's an ok fix, no?
> >
> > Agreed.  At least it's worth trying.
> >
> > I'll create a new ticket for the change (single lock require.).  This
> > ticket is for backporting thread-safe autoload (unless you don't write
> > 'wrong code' :-) by Mike.  I'll wait for the report if the existing
> > thread-safe autoload on trunk works for him or not.
>
> Agreed. At least we can say "concurrent autoloads won't happen" and as
> a result they're 100% safe. Concurrent requires still have concerns,
> but they're less likely to happen because people genreally don't do
> lazy requires in threads unless they're triggered by autoloads.
>

For reasons I described earlier, Rails emulates autoload via requires, so
any threadsafety fix that relies on autoload would either need to mitigate
our need to emulate autoload (by allowing something like autoload
"Foo::Bar", "foo/bar") or also support threadsafe require.

That said, I don't see why we couldn't support threadsafe require for cases
where lazy require makes sense.


> I think an additional warning about doing requires lazily might be
> useful...perhaps any require that happens on some non-main thread that
> *isn't* in response to a require should elicit a warning? Or perhaps
> when we detect concurrent non-autooad requires (i.e. two threads doing
> separate requires at the same time, regardless of the files they're
> loading) we should warn?
>

See above. I would rather just get a single lock around require and make
things safe.


>
> - Charlie
>
>

In This Thread