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(). -- Anton Khirnov _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
