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