У Аўт, 21/10/2008 у 23:46 -0700, rogerdpack піша:
> > > Reloading isn'tthreadsafeand *can't* be due to the way constant
> > > definition works in ruby. Why are you doing it in production mode?
> > > allow_concurrency should be false for development mode?  Is itnot?
> 
> I'm curious about the "constant definition not being threadsafe" -- is
> this a thread safe bug in MRI?
> 
One of the problems here is that the class which is being defined is
visible in other threads. So threads may see partially defined classes.
This is very hard to fix. And it's indeed ruby's (not just MRI, I
believe) problem.

In MRI it is possible to stop all other threads (by setting
Thread.critical) and Rails could try to solve this problem by holding
this flag around #load and #require. But this is not a proper solution,
because Thread.critical is implementation-specific feature and sooner or
later ruby will need to get rid of it. And it should be noted that even
this solution may fail if fancy things is tried during load. For example
if it tries to lock some mutex, which is locked by some other thread.

-- 
Aliaksey Kandratsenka <[EMAIL PROTECTED]>


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to