[Tarantool-patches] [PATCH v2 2/4] fiber: add option and PoC for Lua parent backtrace

Egor Elchinov eelchinov at tarantool.org
Wed Jul 14 12:29:39 MSK 2021



On 12.07.2021 15:09, Cyrill Gorcunov via Tarantool-patches wrote:
> On Fri, Jul 09, 2021 at 02:03:51PM +0300, Egor Elchinov via Tarantool-patches wrote:
>>
>> diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c
>> index 924ff3c82..dd26e2f13 100644
>> --- a/src/lib/core/fiber.c
>> +++ b/src/lib/core/fiber.c
>> @@ -220,6 +220,10 @@ fiber_mprotect(void *addr, size_t len, int prot)
>>   static __thread bool fiber_top_enabled = false;
>>   #endif /* ENABLE_FIBER_TOP */
>>   
>> +#if ENABLE_BACKTRACE
>> +static __thread bool fiber_parent_bt_enabled = false;
>> +#endif /* ENABLE_BACKTRACE */
>> +
> 
> So this variable is declared as TLS in a manner of fiber_top
> functionality. You know I somehow find this fishy because
> it is unclear why it is done this way. I think we should
> revisit this moment for @fiber_top_enabled enabled as well
> but not in this series, so lets leave it as is.
> 
> Please revisit snprintf calls in the patch and strncpy
> as well because they _do_not_ append terminating \0 symbol
> if destination size is not enough. I think we should add
> \0 explicitly all the time.
Thanks, fixed hereinafter.
> 
> I mean
> 
> +static int
> +fiber_parent_backtrace_cb(int frameno, void *frameret, const char *func,
> +			  size_t offset, void *cb_ctx)
> +{
> 	...
> +	char buf[512];
> +	int l = snprintf(buf, sizeof(buf), "#%-2d %p in ", frameno, frameret);
> +	if (func)
> +		snprintf(buf + l, sizeof(buf) - l, "%s+%zu", func, offset);
> +	else
> +		snprintf(buf + l, sizeof(buf) - l, "?");
> 
> we could add
> 
> 	buf[sizeof(buf)-1] = '\0';
> 
> Actually 512 bytes for function name should be more than enough but
> better be on a safe side.
> 
> Other than that the patch looks ok to me, great job, thanks!
> 


More information about the Tarantool-patches mailing list