[Vm-dev] [Cuis-dev] Crashes on snapshot with the new compactor

Juan Vuletich JuanVuletich at zoho.com
Mon Mar 27 03:26:20 UTC 2017

Hi Eliot,

Nobody has reported crashes on image save on Cuis. I never experienced 
one. So, I guess it is ok to wait for the VM fix, as the extra GC as a 
workaround doesn't seem needed in Cuis.


On 25/03/2017 05:27 p.m., Eliot Miranda via Cuis-dev wrote:
> Hi All,
>     a number of people are being affected by crashes on snapshotting 
> the image, the worst possible time for a crash.  There is a bug in the 
> new compactor that unfortunately bites when saving.  The compactor is 
> invoked as part of a full garbage collect after the garbage collector 
> has feed unreachable objects.  Normally the new compactor makes only a 
> single pass through the heap, which may not move all the objects that 
> are possible to move.  (The amount of objects that can be moved in a 
> single pass is limited by available free space.)  But on snapshot the 
> compactor makes as may passes as are necessary to slide all movable 
> objects down as far as possible.  Unfortunately there is a bug in this 
> second pass.
> Fixing this bug is now my priority.  I have an example image from 
> Esteban Lorenzano to test.  I am asking anyone else that can provide 
> an image that reliably crashes when trying to save it to make the 
> image and changes available to me for testing if possible.
> In the mean time one may be able to work around the problem by doing a 
> full garbage collect before snapshot.  This should do a GC with a 
> single compaction pass which should not fail, and then make it much 
> more likely that the GC during snapshot will do a single compaction 
> pass, since fewer objects should be mobile after the single pass 
> compaction in the explicit GC.
> To do this in Pharo I would put a full gc here:
> SessionManager>>snapshot: save andQuit: quit
> | isImageStarting snapshotResult |
> ChangesLog default logSnapshot: save andQuit: quit.
> >> SmalltalkImage current primitiveGarbageCollect.
> self currentSession stop: quit."Image not usable from here until the 
> session is restarted!"
> ...
> In Squeak I would put a full GC here:
> snapshot: save andQuit: quit withExitCode: exitCode embedded: embeddedFlag
> "Mark the changes file and close all files as part of 
> #processShutdownList.
> If save is true, save the current state of this Smalltalk in the image 
> file.
> If quit is true, then exit to the outer OS shell.
> If exitCode is not nil, then use it as exit code.
> The latter part of this method runs when resuming a previously saved 
> image. This resume logic checks for a document file to process when 
> starting up."
> | resuming msg |
> Object flushDependents.
> Object flushEvents.
> ...
> Smalltalk processShutDownList: quit.
> >>SmalltalkImage current primitiveGarbageCollect.
> Cursor write show.
> save ifTrue: [resuming := embeddedFlag
> ifTrue: [self snapshotEmbeddedPrimitive]
> ifFalse: [self snapshotPrimitive]]  "<-- PC frozen here on image file"
> ifFalse: [resuming := false].
> I do apologise for the bug.  I hope it will be fixed within a few days.
> _,,,^..^,,,_
> best, Eliot
> _______________________________________________
> Cuis-dev mailing list
> Cuis-dev at cuis-smalltalk.org
> http://cuis-smalltalk.org/mailman/listinfo/cuis-dev_cuis-smalltalk.org

Juan Vuletich

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170327/3e9c2494/attachment.html>

More information about the Vm-dev mailing list