Wow! Wonderful experience report!

Alexandre


> On Dec 19, 2016, at 2:03 PM, Peter Uhnak <[email protected]> wrote:
> 
> On Mon, Dec 19, 2016 at 08:12:29AM +0800, Ben Coman wrote:
>> Can yo point to where you added you workaround?
> 
> The fix is a single line, because I hate myself.
> 
> interpreterProxy failed ifTrue:[^nil].
> 
> https://github.com/pharo-project/pharo-vm/commit/9bf66cf656b176d988e1b0ba74fc37da467e6192
> 
> To give you more info:
> 
> The problem is that memory of canvas forms are not properly pinned, so during 
> garbage collection the form is being moved, but if at the same time the 
> canvas form is being updated and moved, you are accessing wrong memory -> 
> crash.
> 
> My fix will return prematurely if an error occurs and throws PrimitiveFailed 
> in the image before any wrong memory is accessed. On Roassal side the 
> PrimitiveFailed is catched and a paint cycle is skipped --- this is good 
> enough, as it results only in ocassional flicker that immediately fixes 
> itself instead of crashing the image.
> 
> It seems that on Mac there are also other places in the BitBlt code where the 
> surface is being accessed without a check.
> 
> Also be careful not to be misled by the crash dump stack. It took me quite a 
> while to figure out that GrafPort is already operating on wrong data, so it's 
> not GrafPort's fault, but BitBlt's; of course both should possibly be 
> investigated with respect to the mac crash.
> 
> Final note, personally I found it much easier the debug and manipulate the 
> resulting C code (and recompiling just that), then to modify the Slang code 
> and rebuild the source code and recompile it all (but again, I don't know 
> what is the proper way to work with the VM code).
> 
> I used this script to trigger the crash 
> https://gist.github.com/peteruhnak/024650ed2594301558df4da913549b54
> As the crash depends on memory consumption and "proper" garbage collection 
> cycle, it wasn't the easiest to reproduce, however the script above usually 
> managed to crash it. Having a more reliable way would be nice, but simply 
> triggering GC (nor full GC) wasn't enough because the memory wasn't in the 
> "right" state.
> 
> Peter
> _______________________________________________
> Moose-dev mailing list
> [email protected]
> https://www.list.inf.unibe.ch/listinfo/moose-dev

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




Reply via email to