mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-18 21:45:10 +00:00
d2096679d5
pthread_t is currently defined as a struct, which gets placed into
caller's memory and filled by pthread_create() (which accepts a
pthread_t*).
The problem with this approach is that pthread_join() accepts pthread_t
itself rather than a pointer to it, so it gets a _copy_ of this
structure. This causes non-deterministic failures of pthread_join() to
produce the correct return value - depending on whether the thread
already finished before pthread_join() is called (and thus the copy
contains the correct value), or not (then it contains 0).
Change the definition of pthread_t into a pointer to a struct, that gets
malloced by pthread_create() and freed by pthread_join().
Fixes random failures of fate-ffmpeg-error-rate-fail on Windows after
433cf391f58210432be907d817654929a66e80ba.
See also [1] for an alternative approach that does not require dynamic
allocation, but relies on an assumption that the pthread_t value
remains in a fixed memory location.
[1]
|
||
---|---|---|
.. | ||
aix | ||
atomics | ||
cuda | ||
dispatch_semaphore | ||
djgpp | ||
float | ||
msvcrt | ||
solaris | ||
stdbit | ||
windows | ||
getopt.c | ||
os2threads.h | ||
strtod.c | ||
va_copy.h | ||
w32dlfcn.h | ||
w32pthreads.h |