mike            Thu Jan 26 13:23:33 2006 UTC

  Modified files:              (Branch: PHP_5_1)
    /php-src/ext/curl   interface.c 
  Log:
  MFH: fix bug #36152 problems with curl+ssl and pgsql+ssl in same PHP
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/curl/interface.c?r1=1.62.2.12&r2=1.62.2.13&diff_format=u
Index: php-src/ext/curl/interface.c
diff -u php-src/ext/curl/interface.c:1.62.2.12 
php-src/ext/curl/interface.c:1.62.2.13
--- php-src/ext/curl/interface.c:1.62.2.12      Tue Jan 24 20:11:14 2006
+++ php-src/ext/curl/interface.c        Thu Jan 26 13:23:33 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: interface.c,v 1.62.2.12 2006/01/24 20:11:14 iliaa Exp $ */
+/* $Id: interface.c,v 1.62.2.13 2006/01/26 13:23:33 mike Exp $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
@@ -47,13 +47,11 @@
 /* {{{ cruft for thread safe SSL crypto locks */
 #if defined(ZTS) && defined(HAVE_CURL_SSL)
 # ifdef PHP_WIN32
-#  define PHP_CURL_NEED_SSL_TSL
 #  define PHP_CURL_NEED_OPENSSL_TSL
 #  include <openssl/crypto.h>
 # else /* !PHP_WIN32 */
 #  if defined(HAVE_CURL_OPENSSL)
 #   if defined(HAVE_OPENSSL_CRYPTO_H)
-#    define PHP_CURL_NEED_SSL_TSL
 #    define PHP_CURL_NEED_OPENSSL_TSL
 #    include <openssl/crypto.h>
 #   else
@@ -64,7 +62,6 @@
 #   endif
 #  elif defined(HAVE_CURL_GNUTLS)
 #   if defined(HAVE_GCRYPT_H)
-#    define PHP_CURL_NEED_SSL_TSL
 #    define PHP_CURL_NEED_GNUTLS_TSL
 #    include <gcrypt.h>
 #   else
@@ -94,10 +91,61 @@
 int  le_curl;
 int  le_curl_multi_handle;
 
-#ifdef PHP_CURL_NEED_SSL_TSL
-static inline void php_curl_ssl_init(void);
-static inline void php_curl_ssl_cleanup(void);
+#ifdef PHP_CURL_NEED_OPENSSL_TSL /* {{{ */
+static MUTEX_T *php_curl_openssl_tsl = NULL;
+
+static void php_curl_ssl_lock(int mode, int n, const char * file, int line)
+{
+       if (mode & CRYPTO_LOCK) {
+               tsrm_mutex_lock(php_curl_openssl_tsl[n]);
+       } else {
+               tsrm_mutex_unlock(php_curl_openssl_tsl[n]);
+       }
+}
+
+static unsigned long php_curl_ssl_id(void)
+{
+       return (unsigned long) tsrm_thread_id();
+}
 #endif
+/* }}} */
+
+#ifdef PHP_CURL_NEED_GNUTLS_TSL /* {{{ */
+static int php_curl_ssl_mutex_create(void **m)
+{
+       if (*((MUTEX_T *) m) = tsrm_mutex_alloc()) {
+               return SUCCESS;
+       } else {
+               return FAILURE;
+       }
+}
+
+static int php_curl_ssl_mutex_destroy(void **m)
+{
+       tsrm_mutex_free(*((MUTEX_T *) m));
+       return SUCCESS;
+}
+
+static int php_curl_ssl_mutex_lock(void **m)
+{
+       return tsrm_mutex_lock(*((MUTEX_T *) m));
+}
+
+static int php_curl_ssl_mutex_unlock(void **m)
+{
+       return tsrm_mutex_unlock(*((MUTEX_T *) m));
+}
+
+static struct gcry_thread_cbs php_curl_gnutls_tsl = {
+       GCRY_THREAD_OPTION_USER,
+       NULL,
+       php_curl_ssl_mutex_create,
+       php_curl_ssl_mutex_destroy,
+       php_curl_ssl_mutex_lock,
+       php_curl_ssl_mutex_unlock
+};
+#endif
+/* }}} */
 
 static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC);
 
@@ -449,9 +497,24 @@
        REGISTER_CURL_CONSTANT(CURLFTPAUTH_TLS);
 #endif
 
-#ifdef PHP_CURL_NEED_SSL_TSL
-       php_curl_ssl_init();
+#ifdef PHP_CURL_NEED_OPENSSL_TSL
+       {
+               int i, c = CRYPTO_num_locks();
+               
+               php_curl_openssl_tsl = malloc(c * sizeof(MUTEX_T));
+               
+               for (i = 0; i < c; ++i) {
+                       php_curl_openssl_tsl[i] = tsrm_mutex_alloc();
+               }
+               
+               CRYPTO_set_id_callback(php_curl_ssl_id);
+               CRYPTO_set_locking_callback(php_curl_ssl_lock);
+       }
 #endif
+#ifdef PHP_CURL_NEED_GNUTLS_TSL
+       gcry_control(GCRYCTL_SET_THREAD_CBS, &php_curl_gnutls_tsl);
+#endif
+       
        if (curl_global_init(CURL_GLOBAL_SSL) != CURLE_OK) {
                return FAILURE;
        }
@@ -488,9 +551,26 @@
        php_unregister_url_stream_wrapper("ftp" TSRMLS_CC);
        php_unregister_url_stream_wrapper("ldap" TSRMLS_CC);
 #endif
+#ifdef PHP_CURL_NEED_OPENSSL_TSL
+       /* ensure there are valid callbacks set */
+       CRYPTO_set_id_callback(php_curl_ssl_id);
+       CRYPTO_set_locking_callback(php_curl_ssl_lock);
+#endif
        curl_global_cleanup();
-#ifdef PHP_CURL_NEED_SSL_TSL
-       php_curl_ssl_cleanup();
+#ifdef PHP_CURL_NEED_OPENSSL_TSL
+       if (php_curl_openssl_tsl) {
+               int i, c = CRYPTO_num_locks();
+                       
+               CRYPTO_set_id_callback(NULL);
+               CRYPTO_set_locking_callback(NULL);
+                       
+               for (i = 0; i < c; ++i) {
+                       tsrm_mutex_free(php_curl_openssl_tsl[i]);
+               }
+                       
+               free(php_curl_openssl_tsl);
+               php_curl_openssl_tsl = NULL;
+       }
 #endif
        return SUCCESS;
 }
@@ -1683,105 +1763,6 @@
 }      
 /* }}} */
 
-#ifdef PHP_CURL_NEED_OPENSSL_TSL
-/* {{{ */
-static MUTEX_T *php_curl_openssl_tsl = NULL;
-
-static void php_curl_ssl_lock(int mode, int n, const char * file, int line)
-{
-       if (mode & CRYPTO_LOCK) {
-               tsrm_mutex_lock(php_curl_openssl_tsl[n]);
-       } else {
-               tsrm_mutex_unlock(php_curl_openssl_tsl[n]);
-       }
-}
-
-static unsigned long php_curl_ssl_id(void)
-{
-       return (unsigned long) tsrm_thread_id();
-}
-
-static inline void php_curl_ssl_init(void)
-{
-       int i, c = CRYPTO_num_locks();
-       
-       php_curl_openssl_tsl = malloc(c * sizeof(MUTEX_T));
-       
-       for (i = 0; i < c; ++i) {
-               php_curl_openssl_tsl[i] = tsrm_mutex_alloc();
-       }
-       
-       CRYPTO_set_id_callback(php_curl_ssl_id);
-       CRYPTO_set_locking_callback(php_curl_ssl_lock);
-}
-
-static inline void php_curl_ssl_cleanup(void)
-{
-       if (php_curl_openssl_tsl) {
-               int i, c = CRYPTO_num_locks();
-               
-               CRYPTO_set_id_callback(NULL);
-               CRYPTO_set_locking_callback(NULL);
-               
-               for (i = 0; i < c; ++i) {
-                       tsrm_mutex_free(php_curl_openssl_tsl[i]);
-               }
-               
-               free(php_curl_openssl_tsl);
-               php_curl_openssl_tsl = NULL;
-       }
-}
-#endif /* PHP_CURL_NEED_OPENSSL_TSL */
-/* }}} */
-
-#ifdef PHP_CURL_NEED_GNUTLS_TSL
-/* {{{ */
-static int php_curl_ssl_mutex_create(void **m)
-{
-       if (*((MUTEX_T *) m) = tsrm_mutex_alloc()) {
-               return SUCCESS;
-       } else {
-               return FAILURE;
-       }
-}
-
-static int php_curl_ssl_mutex_destroy(void **m)
-{
-       tsrm_mutex_free(*((MUTEX_T *) m));
-       return SUCCESS;
-}
-
-static int php_curl_ssl_mutex_lock(void **m)
-{
-       return tsrm_mutex_lock(*((MUTEX_T *) m));
-}
-
-static int php_curl_ssl_mutex_unlock(void **m)
-{
-       return tsrm_mutex_unlock(*((MUTEX_T *) m));
-}
-
-static struct gcry_thread_cbs php_curl_gnutls_tsl = {
-       GCRY_THREAD_OPTION_USER,
-       NULL,
-       php_curl_ssl_mutex_create,
-       php_curl_ssl_mutex_destroy,
-       php_curl_ssl_mutex_lock,
-       php_curl_ssl_mutex_unlock
-};
-
-static inline void php_curl_ssl_init(void)
-{
-       gcry_control(GCRYCTL_SET_THREAD_CBS, &php_curl_gnutls_tsl);
-}
-
-static inline void php_curl_ssl_cleanup(void)
-{
-       return;
-}
-#endif /* PHP_CURL_NEED_GNUTLS_TSL */
-/* }}} */
-
 #endif /* HAVE_CURL */
 
 /*

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to