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