]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Tue May 19 12:00:30 CDT 2009 Pekka Pessi <first.last@nokia.com>
authorMichael Jerris <mike@jerris.com>
Tue, 19 May 2009 17:25:08 +0000 (17:25 +0000)
committerMichael Jerris <mike@jerris.com>
Tue, 19 May 2009 17:25:08 +0000 (17:25 +0000)
  * su_uniqueid.c: Solaris misdefines PTHREAD_ONCE_INIT
  Ignore-this: 9fe2247164d572901ed4a30b009353db

  Solaris defines pthread_once_t as a struct containing an array. The
  initializer PTHREAD_ONCE_INIT needs two levels of brackets it but only has
  one. Original patch from Mike Jerris <mike@jerris.com>.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13388 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c

index 902eb06483acc788ce06320b4923a28f7b93d998..f624244fd2e30ef20f7be841333434eff0f080b4 100644 (file)
@@ -1 +1 @@
-Tue May 19 12:23:01 CDT 2009
+Tue May 19 12:24:21 CDT 2009
index 0ab447624674c4dba3ca61e3575d40a6b9591c2a..25f9e79b8b70641e8325c754f74e6882cc00e24a 100644 (file)
@@ -68,11 +68,38 @@ static char const __func__[] = "tport_tls";
 #include <signal.h>
 #endif
 
+#if SU_HAVE_PTHREADS
+
+#include <pthread.h>
+
+#if __sun
+#undef PTHREAD_ONCE_INIT
+#define PTHREAD_ONCE_INIT {{ 0, 0, 0, PTHREAD_ONCE_NOTDONE }}
+#endif
+
+static pthread_once_t once = PTHREAD_ONCE_INIT;
+#define ONCE_INIT(f) pthread_once(&once, f)
+
+#else
+
+static int once;
+#define ONCE_INIT(f) (!once ? (once = 1), f() : (void)0)
+
+#endif
+
 #include "tport_tls.h"
 
 char const tls_version[] = OPENSSL_VERSION_TEXT;
 int tls_ex_data_idx = -1; /* see SSL_get_ex_new_index(3ssl) */
 
+static void
+tls_init_once(void)
+{
+  SSL_library_init();
+  SSL_load_error_strings();
+  tls_ex_data_idx = SSL_get_ex_new_index(0, "sofia-sip private data", NULL, NULL, NULL);
+}
+
 enum  { tls_master = 0, tls_slave = 1};
 
 struct tls_s {
@@ -218,15 +245,13 @@ int tls_verify_cb(int ok, X509_STORE_CTX *store)
 static
 int tls_init_context(tls_t *tls, tls_issues_t const *ti)
 {
-  static int initialized = 0;
   int verify;
+  static int random_loaded;
+
+  ONCE_INIT(tls_init_once);
 
-  if (!initialized) {
-    initialized = 1;
-    SSL_library_init();
-    SSL_load_error_strings();
-    tls_ex_data_idx = SSL_get_ex_new_index(0, \
-                      "sofia-sip private data", NULL, NULL, NULL);
+  if (!random_loaded) {
+    random_loaded = 1;
 
     if (ti->randFile &&
        !RAND_load_file(ti->randFile, 1024 * 1024)) {