From: RĂ©mi Denis-Courmont Date: Sat, 6 Nov 2004 12:05:32 +0000 (+0000) Subject: gcrypt thread-safety X-Git-Tag: 0.8.2~1782 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=6967fdf460bb2e9a151db27b871859917bd66bab;p=vlc gcrypt thread-safety --- diff --git a/modules/misc/gnutls.c b/modules/misc/gnutls.c index 1ef33f28a2..3515ead79f 100644 --- a/modules/misc/gnutls.c +++ b/modules/misc/gnutls.c @@ -36,11 +36,12 @@ * Preamble *****************************************************************************/ #include +#include #include #include "vlc_tls.h" - +#include #include #define DH_BITS 1024 @@ -383,6 +384,56 @@ gnutls_ServerCreate( tls_t *p_this, const char *psz_cert_path, } +/* + * gcrypt thread option VLC implementation + */ +vlc_object_t *__p_gcry_data; + +static int gcry_vlc_mutex_init (void **p_sys) +{ + int i_val; + vlc_mutex_t *p_lock = (vlc_mutex_t *)malloc (sizeof (vlc_mutex_t)); + + if( p_lock == NULL) + return ENOMEM; + + i_val = vlc_mutex_init( __p_gcry_data, p_lock); + if (i_val) + free (p_lock); + else + *p_sys = p_lock; + return i_val; +} + +static int gcry_vlc_mutex_destroy (void **p_sys) +{ + int i_val; + vlc_mutex_t *p_lock = (vlc_mutex_t *)*p_sys; + + i_val = vlc_mutex_destroy (p_lock); + free (p_lock); + return i_val; +} + +static int gcry_vlc_mutex_lock (void **p_sys) +{ + return vlc_mutex_lock ((vlc_mutex_t *)*p_sys); +} + +static int gcry_vlc_mutex_unlock (void **lock) +{ + return vlc_mutex_unlock ((vlc_mutex_t *)*lock); +} + +static struct gcry_thread_cbs gcry_threads_vlc = +{ + GCRY_THREAD_OPTION_USER, + NULL, + gcry_vlc_mutex_init, + gcry_vlc_mutex_destroy, + gcry_vlc_mutex_lock, + gcry_vlc_mutex_unlock +}; static int @@ -403,6 +454,9 @@ Open( vlc_object_t *p_this ) /* FIXME: should check version number */ if( count.i_int == 0) { + __p_gcry_data = p_this; + + gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_vlc); if( gnutls_global_init( ) ) { msg_Warn( p_this, "cannot initialize GNUTLS" );