Message ID | 20230802070301.31623-1-martin@martin.st |
---|---|
State | Accepted |
Commit | 7aa9684db39a8ecf444b3af1c74c225757d8e49f |
Headers | show |
Series | [FFmpeg-devel] w32pthreads: Fix function signature mismatches for CreateThread | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
On Wed, 2 Aug 2023, Martin Storsjö wrote: > In WinRT mode, we use CreateThread instead of _beginthreadex. > > CreateThread takes a LPTHREAD_START_ROUTINE function pointer, > which has got the signature DWORD WINAPI ThreadProc(LPVOID). > _beginthreadex takes a function with the signature > unsigned __stdcall func(void *). > > DWORD is defined as an unsigned long, which is different type > from unsigned int, even if they have the same size on Windows. > > This fixes build failures with Clang 16 and newer, where function > pointer type mismatches are a fatal error by default. > --- > compat/w32pthreads.h | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h > index 6405e72b64..dae8d9420d 100644 > --- a/compat/w32pthreads.h > +++ b/compat/w32pthreads.h > @@ -66,7 +66,14 @@ typedef CONDITION_VARIABLE pthread_cond_t; > #define PTHREAD_CANCEL_ENABLE 1 > #define PTHREAD_CANCEL_DISABLE 0 > > -static av_unused unsigned __stdcall attribute_align_arg win32thread_worker(void *arg) > +#if HAVE_WINRT > +#define THREADFUNC_RETTYPE DWORD > +#else > +#define THREADFUNC_RETTYPE unsigned > +#endif > + > +static av_unused THREADFUNC_RETTYPE > +__stdcall attribute_align_arg win32thread_worker(void *arg) > { > pthread_t *h = (pthread_t*)arg; > h->ret = h->func(h->arg); > -- > 2.34.1 Will push soon if there's no objections, as this is rather trivial. // Martin
diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h index 6405e72b64..dae8d9420d 100644 --- a/compat/w32pthreads.h +++ b/compat/w32pthreads.h @@ -66,7 +66,14 @@ typedef CONDITION_VARIABLE pthread_cond_t; #define PTHREAD_CANCEL_ENABLE 1 #define PTHREAD_CANCEL_DISABLE 0 -static av_unused unsigned __stdcall attribute_align_arg win32thread_worker(void *arg) +#if HAVE_WINRT +#define THREADFUNC_RETTYPE DWORD +#else +#define THREADFUNC_RETTYPE unsigned +#endif + +static av_unused THREADFUNC_RETTYPE +__stdcall attribute_align_arg win32thread_worker(void *arg) { pthread_t *h = (pthread_t*)arg; h->ret = h->func(h->arg);