noxworld-dev / opennox

OpenNox main repository.
GNU General Public License v3.0
463 stars 25 forks source link

Solo quest randomly crash #715

Open blmarket opened 2 months ago

blmarket commented 2 months ago

Example video: https://youtu.be/zX1V9vsbtfU?t=542

How to reproduce: just... has to play game in a solo quest mode. Sometimes it happen in less than 5min, in other case it does not happen after 1 hour.

Some game logs:

2024/08/06 18:38:56 [console]: 시스템> 화이어볼 마법을 사용했습니다.
2024/08/06 18:38:56 [console]: 시스템> 화이어볼 마법을 사용했습니다.
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x200 pc=0x8bda476]

goroutine 1 [running, locked to thread]:
github.com/noxworld-dev/opennox/v1.RunArgs.func1()
    /home/blmarket/proj/opennox/src/main.go:96 +0x8f
panic({0x8fb51a0, 0x9c8e438})
    /usr/lib/go/src/runtime/panic.go:770 +0x103
github.com/noxworld-dev/opennox/v1/client.(*clientDrawables).New(...)
    /home/blmarket/proj/opennox/src/client/drawable.go:112
github.com/noxworld-dev/opennox/v1.(*Client).Nox_new_drawable_for_thing(0x65e66000, 0x28d)
    /home/blmarket/proj/opennox/src/drawable.go:43 +0x46
github.com/noxworld-dev/opennox/v1.(*Client).Nox_xxx_spriteLoadAdd_45A360_drawable(0x65e66000, 0x28d, {0xe39, 0x409})
    /home/blmarket/proj/opennox/src/drawable.go:74 +0x2d
github.com/noxworld-dev/opennox/v1/legacy.nox_xxx_spriteLoadAdd_45A360_drawable(0x28d, 0xe39, 0x409)
    /home/blmarket/proj/opennox/src/legacy/drawable.go:65 +0x46
github.com/noxworld-dev/opennox/v1/legacy._Cfunc_nox_xxx_netOnPacketRecvCli_48EA70_switch(0x1f, 0x93, 0x6ceb1013, 0x31)
    _cgo_gotypes.go:8779 +0x3f

Seems it failed to get an object allocated from static pool (seems by default dynamic allocation is not enabled) and return nil, and then the caller tries to write some values in the nil object.

Would be great if we can add more debugging logs on: https://github.com/noxworld-dev/opennox/blob/ff4c0e62e140dedf44855c2e31b4650fbbad0222/src/legacy/common/alloc/classes.go#L280

about remaining free list count, so that we can see which objects do matter.