parent
908d00cbb6
commit
d41695f8bd
@ -0,0 +1,94 @@
|
|||||||
|
From 43332a4fa12ff79f284749177dc0743a495caea6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nicolas Chauvet <kwizart@gmail.com>
|
||||||
|
Date: Sat, 18 Jul 2020 15:19:31 +0200
|
||||||
|
Subject: [PATCH 1/1] Restore support for thread callbacks for older gcrypt
|
||||||
|
|
||||||
|
---
|
||||||
|
include/vlc_gcrypt.h | 64 ++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 64 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/vlc_gcrypt.h b/include/vlc_gcrypt.h
|
||||||
|
index a04e1b1d86..4c7f1e86b0 100644
|
||||||
|
--- a/include/vlc_gcrypt.h
|
||||||
|
+++ b/include/vlc_gcrypt.h
|
||||||
|
@@ -25,6 +25,67 @@
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
+#if GCRYPT_VERSION_NUMBER < 0x010600
|
||||||
|
+#ifdef LIBVLC_USE_PTHREAD
|
||||||
|
+/**
|
||||||
|
+ * If possible, use gcrypt-provided thread implementation. This is so that
|
||||||
|
+ * other non-VLC components (inside the process) can also use gcrypt safely.
|
||||||
|
+ */
|
||||||
|
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
|
||||||
|
+# define gcry_threads_vlc gcry_threads_pthread
|
||||||
|
+#else
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * gcrypt thread option VLC implementation
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+static int gcry_vlc_mutex_init( void **p_sys )
|
||||||
|
+{
|
||||||
|
+ vlc_mutex_t *p_lock = (vlc_mutex_t *)malloc( sizeof( vlc_mutex_t ) );
|
||||||
|
+ if( p_lock == NULL)
|
||||||
|
+ return ENOMEM;
|
||||||
|
+
|
||||||
|
+ vlc_mutex_init( p_lock );
|
||||||
|
+ *p_sys = p_lock;
|
||||||
|
+ return VLC_SUCCESS;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int gcry_vlc_mutex_destroy( void **p_sys )
|
||||||
|
+{
|
||||||
|
+ vlc_mutex_t *p_lock = (vlc_mutex_t *)*p_sys;
|
||||||
|
+ vlc_mutex_destroy( p_lock );
|
||||||
|
+ free( p_lock );
|
||||||
|
+ return VLC_SUCCESS;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int gcry_vlc_mutex_lock( void **p_sys )
|
||||||
|
+{
|
||||||
|
+ vlc_mutex_lock( (vlc_mutex_t *)*p_sys );
|
||||||
|
+ return VLC_SUCCESS;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int gcry_vlc_mutex_unlock( void **lock )
|
||||||
|
+{
|
||||||
|
+ vlc_mutex_unlock( (vlc_mutex_t *)*lock );
|
||||||
|
+ return VLC_SUCCESS;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const 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,
|
||||||
|
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
||||||
|
+};
|
||||||
|
+#endif
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * Initializes gcrypt with proper locking.
|
||||||
|
+ */
|
||||||
|
static inline void vlc_gcrypt_init (void)
|
||||||
|
{
|
||||||
|
/* This would need a process-wide static mutex with all libraries linking
|
||||||
|
@@ -37,6 +98,9 @@ static inline void vlc_gcrypt_init (void)
|
||||||
|
vlc_global_lock (VLC_GCRYPT_MUTEX);
|
||||||
|
if (!done)
|
||||||
|
{
|
||||||
|
+#if GCRYPT_VERSION_NUMBER < 0x010600
|
||||||
|
+ gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_vlc);
|
||||||
|
+#endif
|
||||||
|
/* The suggested way for an application to make sure that global_init
|
||||||
|
* has been called is by using gcry_check_version. (see global_init
|
||||||
|
* comments in gcrypt sources) */
|
||||||
|
--
|
||||||
|
2.25.4
|
||||||
|
|
Loading…
Reference in new issue