vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sat Aug 23 17:26:19 2014 +0300| [6c12257639281c7631c2159d1efd3a052df09c34] | committer: Rémi Denis-Courmont
gnutls: drop useless global mutex and init if version >= 3.3.0 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6c12257639281c7631c2159d1efd3a052df09c34 --- modules/misc/gnutls.c | 68 ++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/modules/misc/gnutls.c b/modules/misc/gnutls.c index 8ef2455..a09af8a 100644 --- a/modules/misc/gnutls.c +++ b/modules/misc/gnutls.c @@ -36,52 +36,64 @@ #include <gnutls/x509.h> #include "dhparams.h" +#if (GNUTLS_VERSION_NUMBER >= 0x030300) +static int gnutls_Init (vlc_object_t *obj) +{ + const char *version = gnutls_check_version ("3.3.0"); + if (version == NULL) + { + msg_Err (obj, "unsupported GnuTLS version"); + return -1; + } + msg_Dbg (p_this, "using GnuTLS verson %s", version); + return 0; +} + +# define gnutls_Deinit() (void)0 +#else static vlc_mutex_t gnutls_mutex = VLC_STATIC_MUTEX; /** * Initializes GnuTLS with proper locking. * @return VLC_SUCCESS on success, a VLC error code otherwise. */ -static int gnutls_Init (vlc_object_t *p_this) +static int gnutls_Init (vlc_object_t *obj) { - int ret = VLC_EGENERIC; - - vlc_mutex_lock (&gnutls_mutex); - if (gnutls_global_init ()) + const char *version = gnutls_check_version ("3.1.9"); + if (version == NULL) { - msg_Err (p_this, "cannot initialize GnuTLS"); - goto error; + msg_Err (obj, "unsupported GnuTLS version"); + return -1; } + msg_Dbg (obj, "using GnuTLS verson %s", version); - const char *psz_version = gnutls_check_version ("3.1.9"); - if (psz_version == NULL) + if (gnutls_check_version ("3.3.0") == NULL) { - msg_Err (p_this, "unsupported GnuTLS version"); - gnutls_global_deinit (); - goto error; - } + int val; - msg_Dbg (p_this, "GnuTLS v%s initialized", psz_version); - ret = VLC_SUCCESS; + vlc_mutex_lock (&gnutls_mutex); + val = gnutls_global_init (); + vlc_mutex_unlock (&gnutls_mutex); -error: - vlc_mutex_unlock (&gnutls_mutex); - return ret; + if (val) + { + msg_Err (obj, "cannot initialize GnuTLS"); + return -1; + } + } + return 0; } - /** * Deinitializes GnuTLS. */ -static void gnutls_Deinit (vlc_object_t *p_this) +static void gnutls_Deinit (void) { vlc_mutex_lock (&gnutls_mutex); - gnutls_global_deinit (); - msg_Dbg (p_this, "GnuTLS deinitialized"); vlc_mutex_unlock (&gnutls_mutex); } - +#endif static int gnutls_Error (vlc_object_t *obj, int val) { @@ -412,7 +424,7 @@ static int OpenClient (vlc_tls_creds_t *crd) { msg_Err (crd, "cannot allocate credentials: %s", gnutls_strerror (val)); - gnutls_Deinit (VLC_OBJECT(crd)); + gnutls_Deinit (); return VLC_EGENERIC; } @@ -439,8 +451,7 @@ static void CloseClient (vlc_tls_creds_t *crd) gnutls_certificate_credentials_t x509 = crd->sys; gnutls_certificate_free_credentials (x509); - - gnutls_Deinit (VLC_OBJECT(crd)); + gnutls_Deinit (); } #ifdef ENABLE_SOUT @@ -567,7 +578,7 @@ static int OpenServer (vlc_tls_creds_t *crd, const char *cert, const char *key) error: free (sys); - gnutls_Deinit (VLC_OBJECT(crd)); + gnutls_Deinit (); return VLC_EGENERIC; } @@ -582,8 +593,7 @@ static void CloseServer (vlc_tls_creds_t *crd) gnutls_certificate_free_credentials (sys->x509_cred); gnutls_dh_params_deinit (sys->dh_params); free (sys); - - gnutls_Deinit (VLC_OBJECT(crd)); + gnutls_Deinit (); } #endif _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
