[Mesa-stable] [PATCH] llvmpipe: Check thread creation errors
Nathan Kidd
nathan-ml at spicycrypto.ca
Fri Nov 15 18:00:15 UTC 2019
Nominate: 9a80b7fd8f282d4b448f826ff88c8770c079fb72
Crash was encountered on a real box in the wild.
-------- Forwarded Message --------
Subject: Re: [Mesa-dev] [PATCH] llvmpipe: Check thread creation errors
Date: Sun, 10 Nov 2019 22:55:30 +0100
From: Roland Scheidegger <sroland at vmware.com>
To: Nathan Kidd <nathan-ml at spicycrypto.ca>, mesa-dev at lists.freedesktop.org
Looks great to me.
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Am 08.11.19 um 23:05 schrieb Nathan Kidd:
> In the case of glibc, pthread_t is internally a pointer. If
> lp_rast_destroy() passes a 0-value pthread_t to pthread_join(), the
> latter will SEGV dereferencing it.
>
> pthread_create() can fail if either the user's ulimit -u or Linux
> kernel's /proc/sys/kernel/threads-max is reached.
>
> Choosing to continue, rather than fail, on theory that it is better to
> run with the one main thread, than not run at all.
>
> Keeping as many threads as we got, since lack of threads severely
> degrades llvmpipe performance.
>
> Signed-off-by: Nathan Kidd <nkidd at opentext.com>
> ---
> src/gallium/drivers/llvmpipe/lp_rast.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c
> b/src/gallium/drivers/llvmpipe/lp_rast.c
> index d50e92b..ef783ea 100644
> --- a/src/gallium/drivers/llvmpipe/lp_rast.c
> +++ b/src/gallium/drivers/llvmpipe/lp_rast.c
> @@ -867,6 +867,10 @@ create_rast_threads(struct lp_rasterizer *rast)
> pipe_semaphore_init(&rast->tasks[i].work_done, 0);
> rast->threads[i] = u_thread_create(thread_function,
> (void *)&rast->tasks[i]);
> + if (!rast->threads[i]) {
> + rast->num_threads = i; /* previous thread is max */
> + break;
> + }
> }
> }
> -- 1.8.3.1
More information about the mesa-stable
mailing list