st/nine: fix stack corruption due to ABI mismatch
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: f3fa7e3068
("st/nine: Use WINE thread for threadpool")
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Andre Heider <a.heider@gmail.com>
Reviewed-by: Axel Davy <davyaxel0@gmail.com>
This commit is contained in:
parent
d2b2364313
commit
10598c9667
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue