[Tarantool-patches] [PATCH luajit v2] core: fix cur_L restoration on error throw
imun at tarantool.org
Thu Aug 19 11:23:27 MSK 2021
I've checked the patch into tarantool branch in tarantool/luajit and
bumped a new version in master.
On 18.08.21, Sergey Kaplun wrote:
> Implement cur_L restoration only for arm64 architecture, due to FreeBSD
> Branch: https://github.com/tarantool/luajit/tree/skaplun/gh-6189-curL-v2
> * https://github.com/tarantool/tarantool/issues/6189
> * https://github.com/tarantool/tarantool/issues/6323
> * https://github.com/tarantool/tarantool/issues/1516
> Tarantool branch: https://github.com/tarantool/tarantool/tree/skaplun/gh-6189-curL-v2
> Enable test-run tests on arm64, Odroid with bump to show their
> P.S. this problem is JIT-related, however, when I turn on `jit.dump()`
> in CI , it is disappeared :(. Also, can't reproduce it inside
> sh4/sh8 VM, test fails only in the CI. Red test-run.py suite due to
> fiber.top issue, see also .
> I suppose it would be nice to have a FreeBSD test machine like we have
> for M1 and Odroid. It may be helpful to research the console issue 
> commit 0f555bf79fefa1016849577500aec52719378ca5
> Author: Sergey Kaplun <skaplun at tarantool.org>
> Date: Sun Aug 15 15:47:13 2021 +0300
> arm64: fix cur_L restoration on error throw
> This change is a kind of follow-up of commits
> ed412cd9f55fe87fd32a69c86e1732690fc5c1b0 ('Update cur_L on exceptional
> path') and 97699d9ee2467389b6aea21a098e38aff3469b5f ('Fix cur_L tracking
> on exceptional path').
> When an error is thrown on the coroutine that is not the one being
> currently executed, `cur_L` is not set up. Hence, when the running trace
> exits at assertion guard right after the error is caught, Lua state is
> restored from the incorrect `cur_L`. As a result the resulting stack is
> inconsistent and the crash occurs.
> Aforementioned patches fix the behaviour only for x86/x64 architectures.
> This patch updates the `cur_L` for arm64 architecture too.
> Nevertheless, throwing an error at non-currently executed coroutine is a
> violation of Lua/C API. So, in the nearest possible future this patch
> should be replaced within the corresponding assert in `lj_err_throw()`.
> Resolves tarantool/tarantool#6189
> Relates to tarantool/tarantool#6323
> Follows up tarantool/tarantool#1516
> : https://github.com/tarantool/tarantool/runs/3349429293#step:5:4569
> : https://github.com/tarantool/tarantool/pull/6303
> : https://github.com/tarantool/tarantool/issues/6231
> Best regards,
> Sergey Kaplun
More information about the Tarantool-patches