[PATCH i-g-t v3 6/6] lib/igt_kmod: Do not leak kmod ctx

Janusz Krzysztofik janusz.krzysztofik at linux.intel.com
Thu Nov 14 17:06:22 UTC 2024


Hi Lucas,

On Thursday, 7 November 2024 06:52:54 CET Lucas De Marchi wrote:
> kmod_ctx() is used as a cheap way to cache the kmod ctx. Make sure it's
> released when the process exit by using igt_install_exit_handler(),
> which also guarantees children forked with igt_fork* don't free it on
> exit. Normal forks are still susceptible to breakage, but if it that
> happens, let it break so we can fix.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>

LGTM.

Reviewed-by: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>

> ---
>  lib/igt_kmod.c | 20 ++++++++++++++------
>  1 file changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index 7be95a61c..89736ae59 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -71,14 +71,20 @@ static void squelch(void *data, int priority,
>  {
>  }
>  
> +static struct kmod_ctx *ctx__;
> +
> +static void free_kmod_ctx(int sig)
> +{
> +	kmod_unref(ctx__);
> +}
> +
>  static struct kmod_ctx *kmod_ctx(void)
>  {
> -	static struct kmod_ctx *ctx;
>  	const char **config_paths = NULL;
>  	char *config_paths_str;
>  	char *dirname;
>  
> -	if (ctx)
> +	if (ctx__)
>  		goto out;
>  
>  	dirname = getenv("IGT_KMOD_DIRNAME");
> @@ -112,14 +118,16 @@ static struct kmod_ctx *kmod_ctx(void)
>  		config_paths[i] = NULL;
>  	}
>  
> -	ctx = kmod_new(dirname, config_paths);
> -	igt_assert(ctx != NULL);
> +	ctx__ = kmod_new(dirname, config_paths);
> +	igt_assert(ctx__ != NULL);
>  
>  	free(config_paths);
> +	igt_install_exit_handler(free_kmod_ctx);
> +
> +	kmod_set_log_fn(ctx__, squelch, NULL);
>  
> -	kmod_set_log_fn(ctx, squelch, NULL);
>  out:
> -	return ctx;
> +	return ctx__;
>  }
>  
>  /**
> 






More information about the igt-dev mailing list