dtls: Set openssl's threadid the 1.0.x way
authorScott D Phillips <scott.d.phillips@intel.com>
Mon, 28 Nov 2016 23:57:33 +0000 (15:57 -0800)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 5 Dec 2016 09:26:15 +0000 (11:26 +0200)
For pre-1.1.x openssl, a callback to set the thread id needs to be
provided to openssl. In 0.9.x the thread id was an unsigned long. In
1.0.x it was expanded to be able to hold a void*. Here we change to use
the 1.0.x API so that the thread id can always hold a GThread*, even on
platforms like msvc x64 where unsigned long is only 32 bits.

All of this is still #ifdef'd out of existence when building with
openssl 1.1.x or later which changed the thread API again, and does not
need a thread id callback.

https://bugzilla.gnome.org/show_bug.cgi?id=775292

ext/dtls/gstdtlsagent.c

index 6ec39fcbc58b7695e24f1f5ac309982f21299ac2..55500f95bbca26e206e0d7a620802fbc61abe174 100644 (file)
@@ -100,10 +100,10 @@ ssl_locking_function (gint mode, gint lock_num, const gchar * file, gint line)
   }
 }
 
-static gulong
-ssl_thread_id_function (void)
+static void
+ssl_thread_id_function (CRYPTO_THREADID * id)
 {
-  return (gulong) g_thread_self ();
+  CRYPTO_THREADID_set_pointer (id, g_thread_self ());
 }
 #endif
 
@@ -138,7 +138,7 @@ _gst_dtls_init_openssl (void)
         g_rw_lock_init (&ssl_locks[i]);
       }
       CRYPTO_set_locking_callback (ssl_locking_function);
-      CRYPTO_set_id_callback (ssl_thread_id_function);
+      CRYPTO_THREADID_set_callback (ssl_thread_id_function);
     }
 #endif