[squeak-dev] broken updateStream

David T. Lewis lewis at mail.msen.com
Sat Apr 8 00:10:35 UTC 2017


To follow up on another idea, I tried reorganizing MCMcmUpdater such that
#doUpdate: processes one MCM at a time, restarting itself after each MCM
by calling itself with a Future.


	config = #restart ifTrue: [
		^self future doUpdate: interactive
	].


Sorry to say, it does not work. The update hangs up at the same place
with the same error. So this seems to be not a solution.

Dave


On Sat, Apr 08, 2017 at 12:45:01AM +0200, Nicolas Cellier wrote:
> Ah no, the binding #MethodContext=>Context is still in the Smalltalk
> globals declarations (and bindings) after update 406.
> It's not at all in Undeclared. Why is that? Oh, no, it's the
> bootstrapContext method:
> 
>     Smalltalk at: #MethodContext ifAbsentPut: [Smalltalk classNamed:
> #Context].
> 
> And there are still plenty references to this binding at this stage.
> 
> So why loading Kernel-eem.1078 manually doesn't do any arm, while loading
> update-eem.407.mcm does?
> This time it'll be for tomorrow
> 
> 2017-04-08 0:21 GMT+02:00 Nicolas Cellier <
> nicolas.cellier.aka.nice at gmail.com>:
> 
> > Ah, but thanks to my previous WeakIdentityDictionary changes, Undeclared
> > holds weakly to its binding.
> > And after update 406, the references to MethodContext have already
> > vanished.
> > So maybe a simple garbageCollect might help update 407 to proceed without
> > any problem?
> >
> > I've just tried that in a package above Kernel in the configuration map....
> > But it does not seems to work. I'll see tomorrow.
> >
> > 2017-04-07 23:07 GMT+02:00 Nicolas Cellier <nicolas.cellier.aka.nice@
> > gmail.com>:
> >
> >> Hi,
> >> I tried updating a relatively recent image from:
> >>
> >> http://files.squeak.org/6.0alpha/Squeak6.0alpha-16548-32bit/
> >>
> >> What happens to me is an unhandled exception MNU Context>>terminateTo:
> >> during update 407.
> >>
> >> Update 407 is loading Kernel.eem.1078 which is storing the new Kernel
> >> classes (Context rather than MethodContext)
> >>
> >> Last change written in the change log is:
> >>
> >>     Context removeSelector: #terminateTo:
> >>
> >> Oh, but there's no such instruction in Kernel-eem.1078...
> >> So what happens exactly which told the image to remove some just
> >> installed Context methods???
> >>
> >> What happens before that is the boostrapContext in Kernel-eem.1077
> >> preamble
> >>
> >>     Smalltalk renameClassNamed: #MethodContext as: #Context
> >>
> >> And what happens when we rename is in Environment>>renameClass:from:to:
> >>
> >>     oldBinding := self declarationOf: oldName.
> >>     declarations removeKey: oldName.
> >>     self binding: oldBinding removedFrom: self.
> >>     " re-route now undeclared oldBinding "
> >>     oldBinding value: aClass.
> >>
> >> That means that we have an Undeclared #MethodeContext => Context.
> >>
> >> And what happens when we ask to remove MethodContext class?
> >> We start removing Context!!!
> >>
> >> So what might be necessary is to purgeUndeclared in Kernel-eem.1078
> >> preamble.
> >> And it will work if and only if we removed all MethodContext references.
> >>
> >>
> >>
> >>
> >>
> >>
> >

> 



More information about the Squeak-dev mailing list