[Mesa-stable] [PATCH 1/3] st/nine: fix stack corruption due to ABI mismatch
Axel Davy
davyaxel0 at gmail.com
Tue Nov 6 20:43:20 UTC 2018
Hi,
The three patches seem ok.
Thanks,
Reviewed-by: Axel Davy <davyaxel0 at gmail.com>
I assume you don't have push rights. I will push in a few days if nobody
complains.
Yours,
Axel Davy
On 06/11/2018 09:27, Andre Heider wrote:
> This fixes various crashes and hangs when using nine's 'thread_submit'
> feature.
>
> On 64bit, the thread function's data argument would just be NULL.
> On 32bit, the data argument would be garbage depending on the compiler
> flags (in my case -march>=core2).
>
> Fixes: f3fa7e3068512d ("st/nine: Use WINE thread for threadpool")
> Cc: mesa-stable at lists.freedesktop.org
> Signed-off-by: Andre Heider <a.heider at gmail.com>
> ---
> src/gallium/state_trackers/nine/threadpool.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/state_trackers/nine/threadpool.c b/src/gallium/state_trackers/nine/threadpool.c
> index cc62fd2579..19721aab2d 100644
> --- a/src/gallium/state_trackers/nine/threadpool.c
> +++ b/src/gallium/state_trackers/nine/threadpool.c
> @@ -37,6 +37,7 @@
> #include "os/os_thread.h"
> #include "threadpool.h"
>
> +/* POSIX thread function */
> static void *
> threadpool_worker(void *data)
> {
> @@ -76,6 +77,15 @@ threadpool_worker(void *data)
> return NULL;
> }
>
> +/* Windows thread function */
> +static DWORD NINE_WINAPI
> +wthreadpool_worker(void *data)
> +{
> + threadpool_worker(data);
> +
> + return 0;
> +}
> +
> struct threadpool *
> _mesa_threadpool_create(struct NineSwapChain9 *swapchain)
> {
> @@ -87,7 +97,9 @@ _mesa_threadpool_create(struct NineSwapChain9 *swapchain)
> pthread_mutex_init(&pool->m, NULL);
> pthread_cond_init(&pool->new_work, NULL);
>
> - pool->wthread = NineSwapChain9_CreateThread(swapchain, threadpool_worker, pool);
> + /* This uses WINE's CreateThread, so the thread function needs to use
> + * the Windows ABI */
> + pool->wthread = NineSwapChain9_CreateThread(swapchain, wthreadpool_worker, pool);
> if (!pool->wthread) {
> /* using pthread as fallback */
> pthread_create(&pool->pthread, NULL, threadpool_worker, pool);
More information about the mesa-stable
mailing list