[Vm-dev] [Pharo-dev] More Windows VM Crashing -_-

Eliot Miranda eliot.miranda at gmail.com
Wed Mar 22 14:06:30 UTC 2017

Hi Peter,

> On Mar 22, 2017, at 2:31 AM, Peter Uhnak <i.uhnak at gmail.com> wrote:
> Hi,
> Originally I thought my VM is crashing because of FT, so I applied some fix from FogBugz (that is now part of Pharo 6), but that didn't help.
> So I disabled FT in settings and changed fonts to non-FT ones; didn't help.
> So I completely removed FT2Plugin.dll (now settings just states that FT fonts are not available), but that didn't help either.
> And obviously there is no crash.dmp whatsoever (this is latest Windows VM).
> This crash is extremely frustrating because the crash happens _during saving_, which means I am losing code all the time and have to constantly recover them, which really makes my blood boil.
> Without crash dump I don't even know where and how to start investigating. Windows kindly opens Visual Studio when Pharo crashes, but all it shows to me is assembly, which is not very useful to me. I can somewhat orient myself in the C code of the VM (as I've alredy fixed some other issues in the VM), but here I am lost.
> <SNIP>
> 00407D7F  ret  
> 00407D80  mov         eax,dword ptr ds:[00596E44h]  
> 00407D85  test        al,3  
> 00407D87  jne         00407DB2  
> 00407D89  mov         ecx,dword ptr ds:[596E08h]  
> 00407D8F  lea         edx,[ecx-1]  
> 00407D92  cmp         eax,edx  
> 00407D94  jb          00407DB2  
> 00407D96  cmp         dword ptr ds:[596E10h],eax  
> 00407D9C  jb          00407DB2  
> 00407D9E  mov         ecx,dword ptr ds:[5B89D0h]  
> 00407DA4  cmp         dword ptr [eax-4],ecx  
> 00407DA7  jb          00407DB2  
> 00407DA9  mov         eax,dword ptr ds:[00596E28h]  
> ---> 00407DAE  movzx       eax,byte ptr [eax]  
> 00407DB1  ret  
> eax = 00000000
> ecx = 04700000
> </SNIP>

Can you post a link to the exact VM you're using?  I may be able to make sense of this.

First, I'm very sorry you're experiencing these crashes.  They're likely a bug in the new compactor.  It makes multiple compaction passes when there are lots of objects, only on snapshot.  In a normal GC it only ever makes one pass.

Therefore, one thing that may allow you to work around the bug is to modify the snapshot:andQuit: method to explicitly do a Smalltalk garbageCollect before invoking the snapshot primitive.  If the bug is only on subsequent passes then the explicit GC should not crash and will make it much less likely that the GC done as part of the snapshot will require a second pass, and hence less likely to crash.

> So my question I guess is:
> How can we fix this? How can I help fix this? Because I've lost countless days of time and energy on this f***ing problem...

Helping me match the code above with the VM will be really helpful.  I want to know the values in registers, and the value of nilObj too.

> Peter

_,,,^..^,,,_ (phone)

More information about the Vm-dev mailing list