Folks -
After running the latest updates in one of my images, I got an error during save and quit. There is a method, forgetGrabCommandsInAllMorphs which enumerates all objects in the system, and then performs a check for those that are morphs. In the process, isMorph gets sent to every object in your system.
I haven't yet figured out why, but some objects were newly obsolete in my image after reading in the latest updates (but it did not happen with several other images), thus causing an error during the enumeration.
If this should happen to you, you can make everything happy again (not perfect, but happy ;-) by filing in the method below. It's not elegant, but it will probably look pretty good to you if you should encounter the same problem.
- Dan ------------------------
!ProtoObject methodsFor: 'comparing' stamp: 'di 5/2/2002 17:06'! isMorph "Only defined here so enumeration in forgetGrabCommandsInAllMorphs will not fail in the presence of obsolete objects"
^ false! !
Dan Ingalls wrote:
Folks -
After running the latest updates in one of my images, I got an error during save and quit. There is a method, forgetGrabCommandsInAllMorphs which enumerates all objects in the system, and then performs a check for those that are morphs. In the process, isMorph gets sent to every object in your system.
I haven't yet figured out why, but some objects were newly obsolete in my image after reading in the latest updates (but it did not happen with several other images), thus causing an error during the enumeration.
- Dan
Well, the fix we put out *does* fool around with obsolete *classes*. But we did test it on a few images, and also we don't understand why it would affect this particular case since we don't think it obsoletes any new classes. Still this is the obvious suspect.
However, we haven't been able to access the latest 3.3a updates so we couldn't try it.
Henrik & Nathanael
PS: Besides fixing some methods in ClassBuilder, the ClassBuilderFix changeset does the following cleanup:
- Making the class hierarchy consistent. This means that it ensures that every regular (resp. obsolete) class is properly registered as a regular (resp. obsolete) class of its superclass,
- Going through all the modules and removing all the weird String keys that are referencing obsolete classes.
- Performing a garbage collection that gets rid of all the obsolete classes that are not referenced anymore.
Perhaps this can provide a clue; maybe this cleanup exposes a lingering problem?
squeak-dev@lists.squeakfoundation.org