<!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&gt;&gt;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.&nbsp; The method seems to enumerate a whole bunch of objects in the 
image, starting at nil.&nbsp; It eventually gets to an ODBObjectID and then 
locks up, waiting for some semaphore.&nbsp; This is where I find the thread when 
I interrupt:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>June 30, 2003 15:45</FONT></DIV>
<DIV>&nbsp;</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>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Semaphore&gt;&gt;critical:<BR>&nbsp;Receiver: a 
Semaphore()<BR>&nbsp;Arguments and temporary variables: 
<BR>&nbsp;&nbsp;mutuallyExcludedBlock: &nbsp;[] in 
ODBFileStream&gt;&gt;atPosition:getBytesFor:len:<BR>&nbsp;&nbsp;blockValue: 
&nbsp;nil<BR>&nbsp;Receiver's instance variables: <BR>&nbsp;&nbsp;firstLink: 
&nbsp;nil<BR>&nbsp;&nbsp;lastLink: &nbsp;nil<BR>&nbsp;&nbsp;excessSignals: 
&nbsp;0</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial 
size=2>ODBFileStream&gt;&gt;atPosition:getBytesFor:len:<BR>&nbsp;Receiver: 
ODBFileStream on: 'C:\Documents and Settings\brans\My Documents\Document 
Directory\Project...etc...<BR>&nbsp;Arguments and temporary variables: 
<BR>&nbsp;&nbsp;anInteger: &nbsp;288<BR>&nbsp;&nbsp;aByteCollection: &nbsp;a 
ByteArray(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)<BR>&nbsp;&nbsp;len: 
&nbsp;16<BR>&nbsp;Receiver's instance variables: <BR>&nbsp;&nbsp;position: 
&nbsp;160<BR>&nbsp;&nbsp;fileHandle: &nbsp;StandardFileStream: 'C:\Documents and 
Settings\brans\My Documents\D...etc...<BR>&nbsp;&nbsp;pathName: 
&nbsp;'C:\Documents and Settings\brans\My Documents\Document 
Directory\Proj...etc...<BR>&nbsp;&nbsp;seekingMutex: &nbsp;a 
Semaphore()</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>ODBObjectIndexFile&gt;&gt;at:<BR>&nbsp;Receiver: an 
ODBObjectIndexFile<BR>&nbsp;Arguments and temporary variables: 
<BR>&nbsp;&nbsp;anInteger: &nbsp;10<BR>&nbsp;&nbsp;bytes: &nbsp;a ByteArray(0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0)<BR>&nbsp;Receiver's instance variables: 
<BR>&nbsp;&nbsp;stream: &nbsp;ODBFileStream on: 'C:\Documents and 
Settings\brans\My Documents\Documen...etc...<BR>&nbsp;&nbsp;valueLength: 
&nbsp;16<BR>&nbsp;&nbsp;pageSize: &nbsp;nil<BR>&nbsp;&nbsp;start: 
&nbsp;144<BR>&nbsp;&nbsp;gcPosition: &nbsp;nil<BR>&nbsp;&nbsp;gcBuffer: 
&nbsp;nil<BR>&nbsp;&nbsp;gcCount: &nbsp;nil<BR>&nbsp;&nbsp;var1: 
&nbsp;nil</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>ODBContainer&gt;&gt;at:<BR>&nbsp;Receiver: an 
ODBContainer<BR>&nbsp;Arguments and temporary variables: <BR>&nbsp;&nbsp;index: 
&nbsp;10<BR>&nbsp;&nbsp;bytes: &nbsp;nil<BR>&nbsp;Receiver's instance variables: 
<BR>&nbsp;&nbsp;objectManager: &nbsp;an ODBObjectManager<BR>&nbsp;&nbsp;id: 
&nbsp;1<BR>&nbsp;&nbsp;name: &nbsp;'Default'<BR>&nbsp;&nbsp;path: 
&nbsp;'C:\Documents and Settings\brans\My Documents\Document 
Directory\Projects...etc...<BR>&nbsp;&nbsp;indexFile: &nbsp;an 
ODBObjectIndexFile<BR>&nbsp;&nbsp;dbFiles: &nbsp;an 
ODBWeakValueIdentityDictionary<BR>&nbsp;&nbsp;dataFileA: &nbsp;an 
ODBObjectStorage<BR>&nbsp;&nbsp;dataFileB: 
&nbsp;nil<BR>&nbsp;&nbsp;activeDataFile: &nbsp;an 
ODBObjectStorage<BR>&nbsp;&nbsp;byteStorageQueue: &nbsp;an 
OrderedCollection()<BR>&nbsp;&nbsp;queueSize: &nbsp;0</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><BR>--- The full stack 
---<BR>Semaphore&gt;&gt;critical:<BR>ODBFileStream&gt;&gt;atPosition:getBytesFor:len:<BR>ODBObjectIndexFile&gt;&gt;at:<BR>ODBContainer&gt;&gt;at:<BR>&nbsp;- 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-<BR>ODBObjectManager&gt;&gt;holderAt:<BR>[] in 
ODBLocalTransaction(ODBTransaction)&gt;&gt;transactionObjectAt:<BR>BlockContext&gt;&gt;ensure:<BR>BlockContext&gt;&gt;valueUnpreemptively<BR>ODBLocalTransaction(ODBTransaction)&gt;&gt;transactionObjectAt:<BR>ODBDemandLoader&gt;&gt;getObject<BR>ODBDemandLoader&gt;&gt;perform:withArguments:<BR>ODBReference&gt;&gt;doesNotUnderstand:<BR>[] 
in CommandHistory 
class&gt;&gt;forgetAllGrabCommandsFrom:<BR>BlockContext&gt;&gt;on:do:<BR>BlockContext&gt;&gt;ifError:<BR>CommandHistory 
class&gt;&gt;forgetAllGrabCommandsFrom:<BR>[] in CommandHistory 
class&gt;&gt;forgetAllGrabCommandsFrom:<BR>[] in 
BlockContext&gt;&gt;ifError:<BR>Error(Exception)&gt;&gt;handlerAction<BR>Error(Exception)&gt;&gt;signal<BR>Error(Exception)&gt;&gt;signal:<BR>StandardFileStream(Object)&gt;&gt;error:<BR>StandardFileStream(Object)&gt;&gt;primitiveFailed<BR>StandardFileStream&gt;&gt;primSetPosition:to:<BR>StandardFileStream&gt;&gt;position:<BR>[] 
in ODBFileStream&gt;&gt;atPosition:getBytesFor:len:<BR>[] in 
Semaphore&gt;&gt;critical:<BR>BlockContext&gt;&gt;ensure:<BR>Semaphore&gt;&gt;critical:<BR>ODBFileStream&gt;&gt;atPosition:getBytesFor:len:<BR>ODBObjectIndexFile&gt;&gt;at:<BR>ODBContainer&gt;&gt;at:<BR>ODBObjectManager&gt;&gt;holderAt:<BR>[] 
in 
ODBLocalTransaction(ODBTransaction)&gt;&gt;transactionObjectAt:<BR>BlockContext&gt;&gt;ensure:<BR>BlockContext&gt;&gt;valueUnpreemptively<BR>ODBLocalTransaction(ODBTransaction)&gt;&gt;transactionObjectAt:<BR>ODBDemandLoader&gt;&gt;getObject<BR>ODBDemandLoader&gt;&gt;perform:withArguments:<BR>ODBReference&gt;&gt;doesNotUnderstand:<BR>[] 
in CommandHistory 
class&gt;&gt;forgetAllGrabCommandsFrom:<BR>BlockContext&gt;&gt;on:do:<BR>BlockContext&gt;&gt;ifError:<BR>CommandHistory 
class&gt;&gt;forgetAllGrabCommandsFrom:<BR>CommandHistory 
class&gt;&gt;resetAllHistory<BR>CommandHistory class&gt;&gt;shutDown:<BR>[] in 
SystemDictionary&gt;&gt;send:toClassesNamedIn:with:<BR>OrderedCollection&gt;&gt;do:<BR>SystemDictionary&gt;&gt;send:toClassesNamedIn:with:<BR>SystemDictionary&gt;&gt;processShutDownList:<BR>SystemDictionary&gt;&gt;snapshot:andQuit:embedded:<BR>SystemDictionary&gt;&gt;snapshot:andQuit:<BR>TheWorldMenu&gt;&gt;saveAndQuit<BR>TheWorldMenu&gt;&gt;doMenuItem:with:<BR>[] 
in 
MenuItemMorph&gt;&gt;invokeWithEvent:<BR>BlockContext&gt;&gt;ensure:<BR>CursorWithMask(Cursor)&gt;&gt;showWhile:<BR>MenuItemMorph&gt;&gt;invokeWithEvent:<BR>MenuItemMorph&gt;&gt;mouseUp:<BR>MenuItemMorph&gt;&gt;handleMouseUp:<BR>MouseButtonEvent&gt;&gt;sentTo:<BR>-- 
and more not shown --</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</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>