Closed ghost closed 3 years ago
Должна быть строка с аллокацией.
@a1batross
Немного потестировал и опять этот баг поймал, правда теперь почему-то вместо "not allocated or double freed" ругается на "trashed header sentinel 1":
Mem_Free: trashed header sentinel 1 (alloc at ../engine/common/mod_bmodel.c:119928016, free at ../engine/common/model.c:110)
Поймай со включенным asan
@mittorn Проверил с asan, в случае подключенного asan вылетает сразу-же после второго перехода, причём всегда:
==5255==ERROR: AddressSanitizer: heap-use-after-free on address 0x610000066e78 at pc 0x7ff6538b008c bp 0x7ffe145ecab0 sp 0x7ffe145ecaa0
READ of size 8 at 0x610000066e78 thread T0
#0 0x7ff6538b008b in Cache_Check ../engine/common/common.c:841
#1 0x7ff65398d8c7 in Mod_CacheCheck ../engine/common/model.c:509
#2 0x7ff65187ca87 in pfnMod_CacheCheck ../ref_soft/r_studio.c:3668
#3 0x7ff64e81da37 in CStudioModelRenderer::StudioGetAnim(model_s*, mstudioseqdesc_t*) ../cl_dll/StudioModelRenderer.cpp:391
#4 0x7ff64e81f3f6 in CStudioModelRenderer::StudioSetupBones() ../cl_dll/StudioModelRenderer.cpp:809
#5 0x7ff64e81f151 in CStudioModelRenderer::StudioDrawModel(int) ../cl_dll/StudioModelRenderer.cpp:1138
#6 0x7ff64e81d0d1 in R_StudioDrawModel(int) ../cl_dll/GameStudioModelRenderer.cpp:71
#7 0x7ff6518ad138 in R_StudioDrawModelInternal ../ref_soft/r_studio.c:3364
#8 0x7ff6518ad352 in R_DrawStudioModel ../ref_soft/r_studio.c:3400
#9 0x7ff65183d33d in R_DrawEntitiesOnList ../ref_soft/r_main.c:838
#10 0x7ff65183e3d1 in R_RenderScene ../ref_soft/r_main.c:1625
#11 0x7ff65183eabb in R_RenderFrame ../ref_soft/r_main.c:1776
#12 0x7ff653c68721 in GL_RenderFrame ../engine/client/ref_common.c:60
#13 0x7ff653c20dcb in V_RenderView ../engine/client/cl_view.c:339
#14 0x7ff653bf1ae4 in SCR_UpdateScreen ../engine/client/cl_scrn.c:558
#15 0x7ff653b9854e in Host_ClientFrame ../engine/client/cl_main.c:3029
#16 0x7ff65390a5bf in Host_Frame ../engine/common/host.c:642
#17 0x7ff65390cbed in Host_RunFrame ../engine/common/host_state.c:144
#18 0x7ff65390cee4 in COM_Frame ../engine/common/host_state.c:194
#19 0x7ff65390bd3e in Host_Main ../engine/common/host.c:1107
#20 0x56039ca425db in Sys_Start ../game_launch/game.cpp:141
#21 0x56039ca425db in main ../game_launch/game.cpp:153
#22 0x7ff6583a6c8a in __libc_start_main (/lib64/libc.so.6+0x23c8a)
#23 0x56039ca42189 in _start (*secret*/xash+0x2189)
0x610000066e78 is located 56 bytes inside of 188-byte region [0x610000066e40,0x610000066efc)
freed by thread T0 here:
#0 0x7ff6592ed50f in __interceptor_free (/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/libasan.so.5+0x10c50f)
#1 0x7ff653a46b4c in Mem_FreeBlock ../engine/common/zone.c:141
previously allocated by thread T0 here:
#0 0x7ff6592ed908 in __interceptor_malloc (/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/libasan.so.5+0x10c908)
#1 0x7ff653a47113 in _Mem_Alloc ../engine/common/zone.c:70
SUMMARY: AddressSanitizer: heap-use-after-free ../engine/common/common.c:841 in Cache_Check
This appears to be a duplicate of https://github.com/FWGS/xash3d-fwgs/issues/260
Баг более не проявляется, скорее всего исправили в коммите https://github.com/FWGS/xash3d-fwgs/commit/9313f7e80e0c33bc58298477d8e24b015502a295.
При переходе между уровнями, с некоторой долей вероятности может сработать Mem_Free: not allocated or double freed. К сожалению, но баг так-же "плавающий" и точных последовательности действий для его воспроизведения я не знаю, но похоже, что оно порой происходит, если произошло больше 5-10 переходов между уровнями за всю работу игры . Backtrace: