Mantis - Squeak Packages
Viewing Issue Advanced Details
7092 Magma major always 06-11-08 23:41 06-16-08 06:20
0007092: #fixObsoleteReferences error when orphaned MagmaMutatingProxies exists
When evaluating

SmalltalkImage current fixObsoleteReferences

in a 3.9 image with Magma r41Beta2 (possibly applies to Beta3 too).
System hangs with: "NonBooleanReceiver: proceed for truth" in SystemNavigation>>obsoleteBehaviors

Patch submitted. [^] (509 bytes) 06-11-08 23:41

06-12-08 21:10   
Hi hfm, hi chris,

I looked at the patch
it calls #maIsMutatingProxy

Which is not defined anywhere in 3.10.1

Wouldn't that mean that any behaviors that should answer false would instead throw up a debugger?

Also when patching something it would be good to include a test. The test should fail before the patch is applied and pass after.

It is a good way to check one's work.
Checking one's work is a good way to gain the confidence of the harvesters.
And a good way to gaurentee you are protecting their time when they vet your fixes.

Yours in service and curiosity, --Jerome Peace
06-15-08 22:44   
hfm, that is not a good solution, the problem is #obsoleteBehaviors is enumerating ALL objects in the image, including ones that do not inherit from Object, sending messages #isBehavior and #isObsolete won't work on those. Adding in a check for #maIsMutatingProxy would only catch the Magma proxies, not any other kinds of ProtoObjects and would still invoke the debugger.

You could move #isBehavior and #isObsolete to ProtoObject, but that would meet headwinds from those who say ProtoObject should have no methods. However, type-checks should reasonably be expected to work, since here we have system-level code using them.
06-16-08 06:20   
Hi Jerome. #maIsMutatingProxy is included as part of Magma package in the MagmaTester repository. Although I've tested this under 3.9, I do not believe you'd find it without installing Magma.

My checking on this was a day by day work with Magma in a production environment. I do not send a test because the conditions under which a mutating proxy appears are not very clear to me. One I've found recently was sending "self class" in a method of a persisted object, this caused a 'Unable to realize Orphaned MagmaMutatingProxy'. I fixed this via an explicit send, i.e.: "self perform: #class". Is this condition correct and enough to reproduce the problem?

Chris: The patch was not intended to catch ProtoObjects, just bypass the Magma proxies since I had never saw a debugger in other cases when fixing obsolete references. Is there are a more clean or less intrusive solution without moving #isObsolete and #isBehavior to ProtoObject?