[squeak-dev] The Trunk: Monticello-bf.504.mcz
bert at freudenbergs.de
Thu Apr 19 17:46:22 UTC 2012
I still don't quite understand how too many files could be open. But that's the error I saw at the VM level - and it only happens on Mac and Linux (which share the same file plugin code).
- Bert -
On 19.04.2012, at 10:36, Nicolas Cellier wrote:
> Ah thanks, very useful.
> I noticed the bug, suspected the origin but didn't had time to correct.
> Le 19 avril 2012 18:36, <commits at source.squeak.org> a écrit :
>> Bert Freudenberg uploaded a new version of Monticello to project The Trunk:
>> ==================== Summary ====================
>> Name: Monticello-bf.504
>> Author: bf
>> Time: 19 April 2012, 9:36:55.211 am
>> UUID: 5fa1177d-b1ed-4cf0-8628-229f171ca814
>> Ancestors: Monticello-eem.503
>> Fix intermittant load problem. We sometimes would get a 'changes file not found' in the middle of updating, but retrying found it just fine. I finally tracked it down to too many files being open. This change re-uses the same read-only copy during a package load (which additionally might speed up loading a tiny bit).
>> =============== Diff against Monticello-eem.503 ===============
>> Item was changed:
>> ----- Method: MCPackageLoader>>basicLoad (in category 'private') -----
>> "Load the contents of some package. This is the core loading method
>> in Monticello. Be wary about modifying it unless you understand the details
>> and dependencies of the various entities being modified."
>> | pkgName |
>> errorDefinitions := OrderedCollection new.
>> "Obviously this isn't the package name but we don't have anything else
>> to use here. ChangeSet current name will generally work since a CS is
>> usually installed prior to installation."
>> pkgName := ChangeSet current name.
>> + [CurrentReadOnlySourceFiles cacheDuring: [[
>> + "Pass 1: Load everything but the methods, which are collected in methodAdditions."
>> - [["Pass 1: Load everything but the methods, which are collected in methodAdditions."
>> additions do: [:ea |
>> ea isMethodDefinition
>> ifTrue:[methodAdditions add: ea asMethodAddition]
>> ifFalse:[[ea load]on: Error do: [errorDefinitions add: ea]].
>> ] displayingProgress: 'Reshaping ', pkgName.
>> "Try again any delayed definitions"
>> self shouldWarnAboutErrors ifTrue: [self warnAboutErrors].
>> errorDefinitions do: [:ea | ea load]
>> displayingProgress: 'Reloading ', pkgName.
>> "Pass 2: We compile new / changed methods"
>> methodAdditions do:[:ea| ea createCompiledMethod]
>> displayingProgress: 'Compiling ', pkgName.
>> 'Installing ', pkgName displayProgressFrom: 0 to: 2 during:[:bar|
>> "There is no progress *during* installation since a progress bar update
>> will redraw the world and potentially call methods that we're just trying to install."
>> bar value: 1.
>> "Pass 3: Install the new / changed methods
>> (this is a separate pass to allow compiler changes to be loaded)"
>> methodAdditions do:[:ea| ea installMethod].
>> "Pass 4: Remove the obsolete methods"
>> removals do:[:ea| ea unload].
>> "Finally, notify observers for the method additions"
>> methodAdditions do: [:each | each notifyObservers]
>> "the message is fake but actually telling people how much time we spend
>> in the notifications is embarrassing so lie instead"
>> displayingProgress: 'Installing ', pkgName.
>> additions do: [:ea | ea postloadOver: (self obsoletionFor: ea)]
>> displayingProgress: 'Initializing ', pkgName.
>> ] on: InMidstOfFileinNotification do: [:n | n resume: true]
>> + ]] ensure: [self flushChangesFile]!
>> - ] ensure: [self flushChangesFile]!
More information about the Squeak-dev