Opened 8 years ago
Closed 8 years ago
#3603 closed defect (needsinfo)
Access violation writing 0x00000000
Reported by: | elexis | Owned by: | |
---|---|---|---|
Priority: | Must Have | Milestone: | |
Component: | Core engine | Keywords: | |
Cc: | Patch: |
Description
Someone experienced a crash today playing a match with two others against 5 bots on r17251.
He was using windows 8.1, rejoined twice and crashed a long time after that.
Also notice Itms and wraitii also crashed few revisions ago.
Luckily we have a crashdump this time.
Attachments (2)
Change History (20)
by , 8 years ago
Attachment: | crashlogs.7z added |
---|
comment:1 by , 8 years ago
If someone on Windows could post the .dmp file in a readable-by-all format, I would appreciate it.
comment:2 by , 8 years ago
Replaying that file visually or non-visually doesn't result in a crash. Despite an instant OOS error, the game could be replayed correctly (no idlers or the like).
comment:3 by , 8 years ago
At a guess, he was out of memory and an allocation failed. It looks like a 1024x1024 (4MB) texture was being converted:
msvcr100.dll!_VEC_memcpy(void * dst=0x59b07040, void * src=0x00400000, int len=-1438227758) + 0x51 bytes C nvtt.dll!527ba6d0() [Frames below may be incorrect and/or missing, no symbols loaded for nvtt.dll] nvtt.dll!527d0abb() > pyrogenesis.exe!CTextureConverter::ConvertTexture(const std::shared_ptr<CTexture> & texture={...}, const Path & src={...}, const Path & dest={...}, const CTextureConverter::Settings & settings={...}) Line 451 C++ pyrogenesis.exe!CTextureManagerImpl::ConvertTexture(const std::shared_ptr<CTexture> & texture={...}) Line 317 C++ pyrogenesis.exe!CTextureManagerImpl::MakeProgress() Line 413 C++ pyrogenesis.exe!RendererIncrementalLoad() Line 257 C++ pyrogenesis.exe!Frame() Line 328 C++ pyrogenesis.exe!RunGameOrAtlas(int argc=1, const char * * argv=0x00ce0d70) Line 535 + 0x5 bytes C++ pyrogenesis.exe!SDL_main(int argc=1, char * * argv=0x00ce0d70) Line 579 + 0xb bytes C++ pyrogenesis.exe!main(int argc=1, char * * argv=0x00ce0d70) Line 140 + 0xd bytes C pyrogenesis.exe!wmain(int argc=1, wchar_t * * argv=0x00cd6150) Line 380 + 0x9 bytes C++ pyrogenesis.exe!__tmainCRTStartup() Line 623 + 0x17 bytes C pyrogenesis.exe!CallStartupWithinTryBlock() Line 397 C++ kernel32.dll!@BaseThreadInitThunk@12() + 0x24 bytes ntdll.dll!__RtlUserThreadStart() + 0x2f bytes ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
follow-up: 5 comment:4 by , 8 years ago
Hey historic_bruno, for the record how did you get that info. I tried to debug it with VS but I only got references to nvtt.dll and nothing to pyrogenesis. So I concluded it was texture related.
comment:5 by , 8 years ago
Replying to stanislas69:
Hey historic_bruno, for the record how did you get that info. I tried to debug it with VS but I only got references to nvtt.dll and nothing to pyrogenesis. So I concluded it was texture related.
Do you have debug symbol paths set up in VS? You need to add the path to the game's binaries and they need to be the same version as the crash (r17251). Unfortunately we don't have debug symbols for NVTT.
follow-up: 9 comment:6 by , 8 years ago
Yup, but he wasn't able to link to pyrogenesis. This what I got http://imgur.com/D2ZnAmZ
refs #3609
comment:7 by , 8 years ago
Modern operating systems really shouldn't run out of memory, but It seems like adding proper allocation checking wouldn't be too difficult. In all of /source
, we use malloc 135 times, realloc 52 times, and calloc 32 times. We just need to validate their return value is non-NULL. Unfortunately, finding other library functions which could allocate memory might be more tricky. On the upside, where new
is used we can just catch the std::bad_alloc
exception at the top of the hierarchy.
comment:8 by , 8 years ago
On Windows, the 32-bit process has a 2GB limit, which the game can easily exceed due to memory leaks (and fragmentation!). Especially after playing multiple games without exiting. I haven't checked recently, but in the past it wasn't uncommon for a single game to reach 1.0-1.5GB.
comment:9 by , 8 years ago
Replying to stanislas69:
Yup, but he wasn't able to link to pyrogenesis. This what I got http://imgur.com/D2ZnAmZ
refs #3609
Looks like newer VS handles the dump file differently than 2010.
follow-up: 11 comment:10 by , 8 years ago
Sounds annoying. Could you generate the pdb for newer release #3609 for nvtt ? I haven't been able to compile it :(
To come back on the issue, how comes someone converts textures in the middle of the game ?
follow-up: 12 comment:11 by , 8 years ago
Replying to stanislas69:
Sounds annoying. Could you generate the pdb for newer release #3609 for nvtt ? I haven't been able to compile it :(
To come back on the issue, how comes someone converts textures in the middle of the game ?
Texture conversion is done on-demand as models are loaded.
follow-up: 14 comment:12 by , 8 years ago
Replying to Josh:
Texture conversion is done on-demand as models are loaded.
I thought they were cached at some point
comment:14 by , 8 years ago
Replying to stanislas69:
Replying to Josh:
Texture conversion is done on-demand as models are loaded.
I thought they were cached at some point
They are cached after being converted, but how long would it take before you rendered every possible texture in-game? :) And if the texture was updated in SVN, that would invalidate the cached version.
The tricky thing about memory is the process may have actually had much more than 4MB available, but not in a contiguous block due to fragmentation, so the game was able to function normally until this new, relatively large texture was encountered.
comment:15 by , 8 years ago
Ah right, but that basically means we are likely to have (and there has been) a lot of those reports when testing S.V.N. on windows. Maybe switching to 64bits on compatible machines would alleviate some of those. Unless it's VRAM ?
We should have a map called texture_demo.xml to cache everything.
In this case though, I believe this is not really a release blocker, unless I'm missing something, or you want to get rid of bad malloc once and for all.
comment:16 by , 8 years ago
I haven't see other reports, so I can't really compare. The next time someone gets an error like that (Access violation writing 0x00000000), it would be useful to inspect memory usage in task manager before exiting and to produce a VMMap report. Also report how long the game has been running, whether they played multiple games in one session, how many times they rejoined, etc.
comment:17 by , 8 years ago
Milestone: | Alpha 19 → Alpha 20 |
---|
I'm pushing to A20 even though its mostly a needinfo ticket.
comment:18 by , 8 years ago
Milestone: | Alpha 20 |
---|---|
Resolution: | → needsinfo |
Status: | new → closed |
Likely out-of-memory.
Files provided by Modefucka2.