[Tarantool-patches] [PATCH v2 2/2] lua: abort trace recording on fiber yield
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Wed Sep 30 01:41:49 MSK 2020
Thanks for the patch!
Functionally all looks good. See one comment related not to Lua.
> diff --git a/src/lua/utils.c b/src/lua/utils.c
> index 8e98f7607..6e38f5734 100644
> --- a/src/lua/utils.c
> +++ b/src/lua/utils.c
> @@ -1309,10 +1310,61 @@ tarantool_lua_utils_init(struct lua_State *L)
> return 0;
> }
>
> +/*
> + * XXX: There is already defined <panic> macro in say.h header
> + * (included in diag.h). As a result the call below is misexpanded
> + * and compilation fails with the corresponding error. To avoid
> + * this error the macro is temporary renamed and restored later.
> + * Compilation now fails for the following cases:
> + * * temporary name <gh1700_panic> is used in scope of this
> + * translation unit
> + * * <panic> is not define, so this hack can be freely dropped
> + */
> +#if defined(panic) && !defined(gh1700_panic)
> +# define gh1700_panic panic
> +# undef panic
> +#else
> +# error "Can't redefine <panic> macro"
> +#endif
Unfortunately, it won't work. Macros are not variables. You
can's assign them like that. I wish we could.
What you did here is you eliminated 'panic' macro, and added a
new macro 'gh1700_panic' whose value is "panic". Not what was
in the old 'panic', but exactly "panic". So the old value of 'panic'
is lost here.
Try to run gcc -E, or try to use gh1700_panic, and you will see it.
Below I tried to use it, but got an error.
@@ -1363,6 +1363,7 @@ void cord_on_yield(void)
* lead to a failure on any next compiler phase.
*/
lj_trace_abort(g);
+ gh1700_panic("message");
}
tarantool/src/lua/utils.c:1366:2: error: implicit declaration of function 'panic' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
gh1700_panic("message");
Also when you try to restore the old 'panic', it also won't work
again. As an alternative you can just do '#undef panic', since your
code is in the end of the file anyway, it won't break shit. Or make
a separate patch, which would turn panic() into a function.
More information about the Tarantool-patches
mailing list