Debugging problem with GOODS 80 in 3.8-6665
David Shaffer
cdshaffer at acm.org
Fri Jun 2 02:58:24 UTC 2006
Ramon Leon wrote:
>In that case, I've got one for you, when I run
>
>ReleaseBuilder new fixObsoleteReferences.
>
>I get a primitive failure...
>
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>BlockContext>>ensure:
>MethodContext(ContextPart)>>handleSignal:
>MethodContext(ContextPart)>>handleSignal:
>Error(Exception)>>signal
>Error(Exception)>>signal:
>Socket(Object)>>error:
>Socket(Object)>>primitiveFailed
>Socket>>primSocketSendDone:
>Socket>>waitForSendDoneFor:
>Socket>>sendData:
>KKConnection>>sendCommand:withByte:withShort:withLong:withLong:
>KKConnection>>sendCommand:withShort:withLong:
>KKConnection>>objectsAt:copy:cluster:
>KKRecordCache>>loadObjectsStartingAt:do:ifAbsent:
>KKKeyCache>>loadObjectAt:
>[] in KKKeyCache>>at: {[self loadObjectAt: key]}
>PluggableDictionary(Dictionary)>>at:ifAbsent:
>
>And I just loaded your new release to make sure that hadn't been fixed, but nope, still blows up. Any ideas?
>
>
Well, yes and no. This is exactly the kind of problem I mentioned: you
have a "dead proxy" (connection is closed) in your image and
fixObsoleteReferences is sending it a message causing it to try to fault
in the corresponding object. Right now the GOODS client doesn't really
try to handle these errors. I have been thinking about, but not working
on, a version which handles these errors differently. I don't have any
idea yet what should be done though. Should a dead proxy silently
swallow messages answering nil? I don't think that would be the right
solution. Should it simply raise a notification and return nil if the
notification is unhandled? That might be better...default to doing
nothing but give the application a chance to handle the problem.
In the mean time when I have problems like this I usually chase
references down. First though I evaluate:
"Clear all implicitly created variables in workspaces"
Workspace allInstances collect: [:each | each setBindings: Dictionary new].
"Clear test case applications -- skip if you're not using SeasideTesting"
SCComponentTestCase clearEntryPoints.
"Clear seaside sessions -- skip if you're not using Seaside"
WARegistry clearAllHandlers.
SMSqueakMap default clearCaches .
MCFileBasedRepository flushAllCaches.
Smalltalk garbageCollect.
Just to clean things up a bit. Often times that gets rid of the
problematic object.
HTH,
David
More information about the Squeak-dev
mailing list
|