llvmpipe: Check thread creation errors
authorNathan Kidd <nkidd@opentext.com>
Fri, 15 Nov 2019 01:35:11 +0000 (02:35 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 15 Nov 2019 01:43:22 +0000 (02:43 +0100)
commit9a80b7fd8f282d4b448f826ff88c8770c079fb72
treedff9b56cea5bd85c9bfcfc3814d89d54419993fe
parent9c3be6d21fa6a45852045d0286b80fb420f82fe3
llvmpipe: Check thread creation errors

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@opentext.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/drivers/llvmpipe/lp_rast.c