[Mesa-dev] [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-dev mailing list