Mantis - Squeak
Viewing Issue Advanced Details
7070 Browser block always 05-28-08 00:07 05-29-08 19:47
closed 3.10.1  
none 3.10.1  
0007070: Browser category Morphic-CandidatesForGo contains missing classes
Downloaded release 3.10.1 on 2008-05-27. The last category in the Browser is broken. Evaluating

(SystemOrganizer allInstances first listAtCategoryNamed: 'Morphic-CandidatesForGo')
    collect: [:each | Smalltalk at: each ifAbsent: [nil]]

results in

{nil . nil . nil . nil . ClassRepresentativeMorph . nil . nil . CommandTilesMorph . nil . DrawErrorMorph . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . PhraseWrapperMorph . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . nil . ViewerEntry . ViewerRow . nil . nil}

so selecting, e.g., BlobMorph from the class pane, gives a couple of walkbacks.
If there's a simpler way to get the stack into the paste buffer, I missed it, so here are copies of the LazyListMorph items.

#('UndefinedObject(Object)>>doesNotUnderstand: #categories' 'Browser>>rawMessageCategoryList' 'PluggableMessageCategoryListMorph>>verifyContents'
'[] in Browser(Object)>>updateListsAndCodeIn: {[:aPane | aPane verifyContents]}' 'Array(SequenceableCollection)>>do:' 'Browser(Object)>>updateListsAndCodeIn:' 'Browser(CodeHolder)>>updateListsAndCodeIn:' 'Browser(CodeHolder)>>stepIn:' 'Browser(Object)>>stepAt:in:' 'SystemWindow>>stepAt:' 'StepMessage(MorphicAlarm)>>value:' 'WorldState>>runLocalStepMethodsIn:' 'WorldState>>runStepMethodsIn:' 'PasteUpMorph>>runStepMethods' 'WorldState>>doOneCycleNowFor:' 'WorldState>>doOneCycleFor:' 'PasteUpMorph>>doOneCycle'
'[] in Project class>>spawnNewProcess {[[World doOneCycle. Processor yield. false] whileFalse. nil]}'
'[] in BlockContext>>newProcess {[self value. Processor terminateActive]}')

#('SystemDictionary(Object)>>error:' 'SystemDictionary(Dictionary)>>errorKeyNotFound'
'[] in SystemDictionary(Dictionary)>>at: {[self errorKeyNotFound]}' 'SystemDictionary(Dictionary)>>at:ifAbsent:' 'SystemDictionary(Dictionary)>>at:' 'Browser>>selectedClass' 'Browser>>setClassOrganizer' 'Browser>>classListIndex:' 'PluggableListMorph>>changeModelSelection:' 'PluggableListMorph>>mouseUp:' 'PluggableListMorph(Morph)>>handleMouseUp:' 'MouseButtonEvent>>sentTo:' nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)
child of 0007076closed KenCausey [tests] The revision (5-29) of the release still leaves problems and 5 classes with no category in system [^] (868 bytes) 05-29-08 16:55

05-28-08 05:44   
Hi sge,

Good bug find thanks for the early report.

I found that when I started getting errors I could not stop. Every attempt to reselect a different catagory brought up the debug window.
nil dnu catagories.

I closed the image (w/o saving) and reopened.

Being a little more cautious I got the error but this time I could get the browser to focus on a different catagory and the error chain stopped.

more data points:

My squeak 7174 (updated via the update stream from 7160) is free of the extra catagory.

So it would seem it was introduced in the condensing of changes.
I am assuming that 7175 did only that right?

This would make sense because there could be confusion when trying to condense a removal.

The workaround fix would be to make the next release w/o condensing the sources.

Then look in to what might be wrong with #condenseSources.

Or find I have guessed wrong and go back to the drawing board.


Yours in service and curiosity, -Jerome Peace
05-28-08 05:53   
I've upped the severity and the priority because this is a show stopper for the release of 3.10.1-7175

If condensing changes is causing this noticable problem then is it also causing less noticable ones as well?

I don't think you can risk the reputation of squeak by generally distributing 7175 until the problem is tracked down and fixed ( or worked around).

3.9 had a similar sticky, hard to get right problem towards its release. They are annoying and frustrating but (imo) you have to fix em.
05-28-08 15:39   
Jerome, I agree this is serious but 3.10.1 is released, so we can't exactly stop the show at this point, unfortunately.

I believe this happened in the release image because of my use of ReleaseBuilderFor3dot10>>makeThreeTenRelease without detailed auditing. I removed obvious stuff I did not want to apply for 3.10.1 but I missed the changes related to morphic class removals in ReleaseBuilderFor3dot10>>unloadMorphicClasses. When I ran this I actually got an error in this class about a missing key on 'Morphic-CandidatesForGo'. I fixed it simplistically without properly thinking through the implications.

So one point is that this problem is only in the released image. If you take a 3.10-7159 image and update it to 3.10.1-7175 then you will not have this problem.

That said if someone has a fix/workaround that could be applied to an existing 3.10-7175 image I would appreciate it.
05-28-08 17:16   
Klaus Witzel has proposed modifying 3.10.1-7175 on the FTP site to add a clear notice of this issue along with a fix. This avoids much of my complaint about having different images with the same name.
nicolas cellier   
05-28-08 19:23   
Could you try this workaround in contaminated image:

| toBeRemoved |
toBeRemoved := Set new.
SystemOrganization categories do: [:catName |
(SystemOrganization listAtCategoryNamed: catName) do: [:className |
(Smalltalk includesKey: className) ifFalse: [
    toBeRemoved add: className]]].
toBeRemoved do: [:each | SystemOrganization removeElement: each].

Then publish in updateStream if it make the symptoms disappear...
05-29-08 00:49   
The workaround from nicolas cellier works for me. Thanks!
05-29-08 03:14   
Hi all,

Nicolas Cellier's goodie catches 36 classes. All in the Morphic-...toGo catagory.
This leaves 6 classes in the catagory that still have a presence but should be gone. None of them have methods that refer to them. Some have actual methods. Some don't.

So now I am really curious about what happened in the last step. How did we get these classes back. What else might have happened that we haven't found yet.

I am also of the opinion that if the updatestream produces a different outcome than the "release" this should be fixed.**

OT (a little) there is a metabug here as well. I call it the Midnite Programmer Bug. After some guys I know who would come in a midnight on a live timesharing system*. Work all night getting the next upgrade for the system going. In the morning when they were exausted and ready to go home to sleep the system looked ready to them. And they released it. Ready for the next days live audience.
Needless to say the audience found some very obvious bugs the programmers overlooked.

The cure (when time is available) is that a release needs time to ripen.
And for the midnite programmer bugs to be found and removed.
Pushing to meet a deadline is laudible.
Bugs getting into the system expectable.

What's hard is scheduling time for the release candidate phase.
Where it is expected that nothing will have to be changed.
But enough time is left to discover the Midnite bugs.

Yours in curiosity and service, --Jerome Peace

*I cut my teeth programming before the internet era.

**When this is fixed, we should end up with a something like 3.10.1-7176 as the next release candidate.

cheers -jer
05-29-08 17:00 uploaded.

It does the test to check for catagories naming missing classes.

Fails in the image release of 7175. Passes in the update stream version of 7175.

I highly recommend this for inclusion in the next release attempt.

Yours in curiosity and service, --Jerome Peace
05-29-08 19:04   
I'm addressing this issue by replacing the copies of 3.10.1-7175-basic on the FTP site with a new one which includes a prominent note in the Welcome window mentioning the issue and include a link that fixes it with a single click. The code that is execute when you click is adapted from Nicolas' suggestion:

SystemOrganization categories do: [:catName |
  (SystemOrganization listAtCategoryNamed: catName)
    do: [:className |
      (Smalltalk includesKey: className) ifFalse: [
        Transcript show: 'Removing ', className printString, String cr.
         SystemOrganization removeElement: className]]].

SystemOrganization classify: #ClassRepresentativeMorph under: 'EToys-Scripting'.

#(CommandTilesMorph DrawErrorMorph PhraseWrapperMorph ViewerEntry ViewerRow)
    do: [ :symbol | SystemOrganization removeElement: symbol ].

SystemOrganization removeSystemCategory: 'Morphic-CandidatesForGo'.
05-29-08 19:47   
Copy on FTP site now updated as well as platform copies.