]> granicus.if.org Git - php/commitdiff
- #51424, solaris part
authorPierre Joye <pajoye@php.net>
Thu, 17 Jun 2010 10:22:03 +0000 (10:22 +0000)
committerPierre Joye <pajoye@php.net>
Thu, 17 Jun 2010 10:22:03 +0000 (10:22 +0000)
ext/standard/config.m4
ext/standard/php_crypt_r.c

index 4e3db0ffe442886e78067bcf27120aeb84047ce6..e28c351b5b9c2b747812f0bd8d059e2793aff9c5 100644 (file)
@@ -566,6 +566,11 @@ if test "$ac_cv_type_mbstate_t" = "yes"; then
   AC_DEFINE([HAVE_MBSTATE_T], 1, [Define if your system has mbstate_t in wchar.h])
 fi
 
+dnl
+dnl Check for atomic operation API availability in Solaris
+dnl
+AC_CHECK_HEADERS([atomic.h])
+
 dnl
 dnl Setup extension sources
 dnl
index 4872c4959961a76b5dc9cf67ca2971f38b344ef4..cd47bfe1230c9f9fdff86f39f0bbdca480d020e9 100644 (file)
 # include <Wincrypt.h>
 #endif
 
-#include <signal.h>
+#ifdef HAVE_ATOMIC_H /* Solaris 10 defines atomic API within */
+# include <atomic.h>
+#else
+# include <signal.h>
+#endif
 #include "php_crypt_r.h"
 #include "crypt_freesec.h"
 
@@ -77,6 +81,8 @@ void _crypt_extended_init_r(void)
 {
 #ifdef PHP_WIN32
        LONG volatile initialized = 0;
+#elif defined(HAVE_ATOMIC_H) /* Solaris 10 defines atomic API within */
+       volatile unsigned int initialized = 0;
 #else
        static volatile sig_atomic_t initialized = 0;
 #endif
@@ -90,6 +96,9 @@ void _crypt_extended_init_r(void)
                InterlockedIncrement(&initialized);
 #elif (defined(__GNUC__) && (__GNUC__ >= 4 && __GNUC_MINOR >= 2))
                __sync_fetch_and_add(&initialized, 1);
+#elif defined(HAVE_ATOMIC_H) /* Solaris 10 defines atomic API within */
+               membar_producer();
+               atomic_add_int(&initialized, 1);
 #endif
                _crypt_extended_init();
        }