[squeak-dev] The Trunk: Monticello-cmm.573.mcz

Chris Muller asqueaker at gmail.com
Wed Dec 18 16:41:21 UTC 2013


This was the change I made to "suspend" RecentMessages when loading
packages but, at the time, it created a VM crash during trunk update
due to class shape-change while on the stack.

So, we rolled back the #suspendWhile: [...] in this method, but we
still have the new isSuspended instVar which is now unused.

But I just noticed we never put the suspendWhile: back, and yet,
somehow, SystemChangeNotifier is no  longer notifying RecentMessages
of loaded methods.

It's not immediately obvious to me why.  Is this related to your
logging API work Nicolas?


On Thu, Oct 3, 2013 at 4:40 PM,  <commits at source.squeak.org> wrote:
> Chris Muller uploaded a new version of Monticello to project The Trunk:
> http://source.squeak.org/trunk/Monticello-cmm.573.mcz
>
> ==================== Summary ====================
>
> Name: Monticello-cmm.573
> Author: cmm
> Time: 3 October 2013, 4:39:53.815 pm
> UUID: c3383883-707a-4bc1-b3ea-3b2ca97053d7
> Ancestors: Monticello-fbs.572
>
> - Factor out cacheAllFilenames and flushAllFilenames to support special-case caching.
> - Stop obliterating Recent Messages when loading MC packages.
>
> =============== Diff against Monticello-fbs.572 ===============
>
> Item was changed:
>   ----- Method: MCFileBasedRepository>>cacheAllFileNamesDuring: (in category 'private') -----
> + cacheAllFileNamesDuring: aBlock
> - cacheAllFileNamesDuring: aBlock
>         "Cache the result of #allFileNames and #allVersionNames during aBlock"
> +       allFileNamesCache ifNotNil: [ ^ aBlock value ].
> +       self cacheAllFilenames.
> +       ^ aBlock ensure: [ self flushAllFilenames ]!
> -
> -       allFileNamesCache ifNotNil: [ ^aBlock value ].
> -       allFileNamesCache := self allFileNames.
> -       allVersionNamesCache := self allVersionNames.
> -       ^aBlock ensure: [ allFileNamesCache := allVersionNamesCache := nil ]!
>
> Item was added:
> + ----- Method: MCFileBasedRepository>>cacheAllFilenames (in category 'private') -----
> + cacheAllFilenames
> +       allFileNamesCache ifNil:
> +               [ allFileNamesCache := self allFileNames.
> +               allVersionNamesCache := self allVersionNames ]!
>
> Item was added:
> + ----- Method: MCFileBasedRepository>>flushAllFilenames (in category 'private') -----
> + flushAllFilenames
> +       allFileNamesCache := allVersionNamesCache := nil!
>
> Item was changed:
>   ----- Method: MCFileBasedRepository>>flushCache (in category 'private') -----
>   flushCache
> +       self flushAllFilenames.
> +       cache := nil!
> -
> -       cache := allFileNamesCache := allVersionNamesCache := nil!
>
> Item was changed:
>   ----- Method: MCPackageLoader>>basicLoad (in category 'private') -----
>   basicLoad
>         "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.
>         preamble ifNotNil: [ChangeSet current preambleString: (self preambleAsCommentNamed: pkgName)].
>
> + RecentMessages default suspendWhile: [
>         [CurrentReadOnlySourceFiles cacheDuring: [[
>         "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]!
>
> Item was added:
> + ----- Method: MCRepository>>cacheAllFilenames (in category 'private') -----
> + cacheAllFilenames
> +       "No-op by default.  Subclasses override for performance."!
>
> Item was added:
> + ----- Method: MCRepository>>flushAllFilenames (in category 'private') -----
> + flushAllFilenames
> +       "No-op.  Subclasses override if necessary."!
>
>


More information about the Squeak-dev mailing list