On Thu, 3 Nov 2011 15:45:38 +0200 (EET), Martin Storsjö <[email protected]> wrote: > On Thu, 3 Nov 2011, Anton Khirnov wrote: > > > > > On Tue, 1 Nov 2011 15:32:39 +0200, Martin Storsjö <[email protected]> wrote: > >> If the application hasn't set up mutex callbacks, we set up > >> our own using pthreads (or w32pthreads). > >> --- > >> libavformat/network.c | 79 > >> +++++++++++++++++++++++++++++++++++++++++++++++++ > >> libavformat/network.h | 3 ++ > >> 2 files changed, 82 insertions(+), 0 deletions(-) > >> > >> diff --git a/libavformat/network.c b/libavformat/network.c > >> index c42cf23..291dc8c 100644 > >> --- a/libavformat/network.c > >> +++ b/libavformat/network.c > >> @@ -19,6 +19,85 @@ > >> */ > >> > >> #include "network.h" > >> +#include "libavcodec/internal.h" > >> + > >> +#define THREADS (HAVE_PTHREADS || (defined(WIN32) && > >> !defined(__MINGW32CE__))) > >> + > >> +#if THREADS > >> +#if HAVE_PTHREADS > >> +#include <pthread.h> > >> +#else > >> +#include "libavcodec/w32pthreads.h" > >> +#endif > >> +#endif > >> + > >> +#if CONFIG_OPENSSL > >> +#include <openssl/ssl.h> > >> +static int openssl_init; > >> +#if THREADS > >> +#include <openssl/crypto.h> > >> +#include "libavutil/avutil.h" > >> +pthread_mutex_t *openssl_mutexes; > >> +static void openssl_lock(int mode, int type, const char *file, int line) > >> +{ > >> + if (mode & CRYPTO_LOCK) > >> + pthread_mutex_lock(&openssl_mutexes[type]); > >> + else > >> + pthread_mutex_unlock(&openssl_mutexes[type]); > >> +} > >> +#ifndef WIN32 > >> +static unsigned long openssl_thread_id(void) > >> +{ > >> + return (intptr_t) pthread_self(); > >> +} > >> +#endif > >> +#endif > >> +#endif > >> + > >> +void ff_tls_init(void) > >> +{ > >> + avpriv_lock_avformat(); > >> +#if CONFIG_OPENSSL > >> + openssl_init++; > >> + if (openssl_init > 1) > >> + return; > >> + SSL_library_init(); > >> + SSL_load_error_strings(); > >> +#if THREADS > >> + if (!CRYPTO_get_locking_callback()) { > >> + int i; > >> + openssl_mutexes = av_malloc(sizeof(pthread_mutex_t) * > >> CRYPTO_num_locks()); > >> + for (i = 0; i < CRYPTO_num_locks(); i++) > >> + pthread_mutex_init(&openssl_mutexes[i], NULL); > >> + CRYPTO_set_locking_callback(openssl_lock); > >> +#ifndef WIN32 > >> + CRYPTO_set_id_callback(openssl_thread_id); > > > > This function seems to be deprecated since 1.0.0, replaced by > > CRYPTO_THREADID_set_callback(). > > OS X Snow Leopard, which I'm using, only has OpenSSL 0.9.8l. As far as I > know, the 0.9.8 series is still in quite wide use - debian stable only has > 0.9.8, and Ubuntu got 1.0.0 only in 11.10. >
Ok then. But we should keep it in mind for the future. -- Anton Khirnov _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
