<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>CommandHistory
class>>forgetAllGrabCommandsFrom:<BR></FONT><FONT face=Arial
size=2></FONT></DIV>
<DIV><FONT face=Arial size=2>This method gets executed when saving and quitting
the image. The method seems to enumerate a whole bunch of objects in the
image, starting at nil. It eventually gets to an ODBObjectID and then
locks up, waiting for some semaphore. This is where I find the thread when
I interrupt:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>June 30, 2003 15:45</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>VM: Win32 - Squeak3.4 of 1 March 2003 [latest
update: #5170]<BR>Image: Squeak3.5 [latest update: #5180]</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>Semaphore>>critical:<BR> Receiver: a
Semaphore()<BR> Arguments and temporary variables:
<BR> mutuallyExcludedBlock: [] in
ODBFileStream>>atPosition:getBytesFor:len:<BR> blockValue:
nil<BR> Receiver's instance variables: <BR> firstLink:
nil<BR> lastLink: nil<BR> excessSignals:
0</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial
size=2>ODBFileStream>>atPosition:getBytesFor:len:<BR> Receiver:
ODBFileStream on: 'C:\Documents and Settings\brans\My Documents\Document
Directory\Project...etc...<BR> Arguments and temporary variables:
<BR> anInteger: 288<BR> aByteCollection: a
ByteArray(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)<BR> len:
16<BR> Receiver's instance variables: <BR> position:
160<BR> fileHandle: StandardFileStream: 'C:\Documents and
Settings\brans\My Documents\D...etc...<BR> pathName:
'C:\Documents and Settings\brans\My Documents\Document
Directory\Proj...etc...<BR> seekingMutex: a
Semaphore()</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>ODBObjectIndexFile>>at:<BR> Receiver: an
ODBObjectIndexFile<BR> Arguments and temporary variables:
<BR> anInteger: 10<BR> bytes: a ByteArray(0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0)<BR> Receiver's instance variables:
<BR> stream: ODBFileStream on: 'C:\Documents and
Settings\brans\My Documents\Documen...etc...<BR> valueLength:
16<BR> pageSize: nil<BR> start:
144<BR> gcPosition: nil<BR> gcBuffer:
nil<BR> gcCount: nil<BR> var1:
nil</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>ODBContainer>>at:<BR> Receiver: an
ODBContainer<BR> Arguments and temporary variables: <BR> index:
10<BR> bytes: nil<BR> Receiver's instance variables:
<BR> objectManager: an ODBObjectManager<BR> id:
1<BR> name: 'Default'<BR> path:
'C:\Documents and Settings\brans\My Documents\Document
Directory\Projects...etc...<BR> indexFile: an
ODBObjectIndexFile<BR> dbFiles: an
ODBWeakValueIdentityDictionary<BR> dataFileA: an
ODBObjectStorage<BR> dataFileB:
nil<BR> activeDataFile: an
ODBObjectStorage<BR> byteStorageQueue: an
OrderedCollection()<BR> queueSize: 0</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2><BR>--- The full stack
---<BR>Semaphore>>critical:<BR>ODBFileStream>>atPosition:getBytesFor:len:<BR>ODBObjectIndexFile>>at:<BR>ODBContainer>>at:<BR> -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-<BR>ODBObjectManager>>holderAt:<BR>[] in
ODBLocalTransaction(ODBTransaction)>>transactionObjectAt:<BR>BlockContext>>ensure:<BR>BlockContext>>valueUnpreemptively<BR>ODBLocalTransaction(ODBTransaction)>>transactionObjectAt:<BR>ODBDemandLoader>>getObject<BR>ODBDemandLoader>>perform:withArguments:<BR>ODBReference>>doesNotUnderstand:<BR>[]
in CommandHistory
class>>forgetAllGrabCommandsFrom:<BR>BlockContext>>on:do:<BR>BlockContext>>ifError:<BR>CommandHistory
class>>forgetAllGrabCommandsFrom:<BR>[] in CommandHistory
class>>forgetAllGrabCommandsFrom:<BR>[] in
BlockContext>>ifError:<BR>Error(Exception)>>handlerAction<BR>Error(Exception)>>signal<BR>Error(Exception)>>signal:<BR>StandardFileStream(Object)>>error:<BR>StandardFileStream(Object)>>primitiveFailed<BR>StandardFileStream>>primSetPosition:to:<BR>StandardFileStream>>position:<BR>[]
in ODBFileStream>>atPosition:getBytesFor:len:<BR>[] in
Semaphore>>critical:<BR>BlockContext>>ensure:<BR>Semaphore>>critical:<BR>ODBFileStream>>atPosition:getBytesFor:len:<BR>ODBObjectIndexFile>>at:<BR>ODBContainer>>at:<BR>ODBObjectManager>>holderAt:<BR>[]
in
ODBLocalTransaction(ODBTransaction)>>transactionObjectAt:<BR>BlockContext>>ensure:<BR>BlockContext>>valueUnpreemptively<BR>ODBLocalTransaction(ODBTransaction)>>transactionObjectAt:<BR>ODBDemandLoader>>getObject<BR>ODBDemandLoader>>perform:withArguments:<BR>ODBReference>>doesNotUnderstand:<BR>[]
in CommandHistory
class>>forgetAllGrabCommandsFrom:<BR>BlockContext>>on:do:<BR>BlockContext>>ifError:<BR>CommandHistory
class>>forgetAllGrabCommandsFrom:<BR>CommandHistory
class>>resetAllHistory<BR>CommandHistory class>>shutDown:<BR>[] in
SystemDictionary>>send:toClassesNamedIn:with:<BR>OrderedCollection>>do:<BR>SystemDictionary>>send:toClassesNamedIn:with:<BR>SystemDictionary>>processShutDownList:<BR>SystemDictionary>>snapshot:andQuit:embedded:<BR>SystemDictionary>>snapshot:andQuit:<BR>TheWorldMenu>>saveAndQuit<BR>TheWorldMenu>>doMenuItem:with:<BR>[]
in
MenuItemMorph>>invokeWithEvent:<BR>BlockContext>>ensure:<BR>CursorWithMask(Cursor)>>showWhile:<BR>MenuItemMorph>>invokeWithEvent:<BR>MenuItemMorph>>mouseUp:<BR>MenuItemMorph>>handleMouseUp:<BR>MouseButtonEvent>>sentTo:<BR>--
and more not shown --</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Derek Brans<BR>Nerd on a Wire<BR>Web design that's
anything but square<BR><A
href="http://www.nerdonawire.com">http://www.nerdonawire.com</A> <BR>mailto: <A
href="mailto:brans@nerdonawire.com">brans@nerdonawire.com</A><BR>phone:
604.874.6463<BR>toll-free: 1-877-NERD-ON-A-WIRE</FONT></DIV></BODY></HTML>