]> granicus.if.org Git - php/commitdiff
- Fixed bug #55874 (GCC does not provide __sync_fetch_and_add on some archs)
authorFelipe Pena <felipe@php.net>
Tue, 15 Nov 2011 20:33:26 +0000 (20:33 +0000)
committerFelipe Pena <felipe@php.net>
Tue, 15 Nov 2011 20:33:26 +0000 (20:33 +0000)
  patch by: klightspeed at netspace dot net dot au

NEWS
configure.in
ext/standard/php_crypt_r.c

diff --git a/NEWS b/NEWS
index 54e45362f218560e4817228f4f569c6e49185573..b6cfbbb0ed79a9e7f0c4017428c5f97613a6a4f3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ PHP                                                                        NEWS
 - Core:
   . Fixed bug #60227 (header() cannot detect the multi-line header with 
      CR(0x0D)). (rui)
+  . Fixed bug #55874 (GCC does not provide __sync_fetch_and_add on some archs).
+    (klightspeed at netspace dot net dot au)
   . Fixed bug #52624 (tempnam() by-pass open_basedir with inexistent directory).
     (Felipe)
 
index bc82a7daad989a1a40749f91ca5b5d2cb7a65041..5e6739933b0bf60401965b1352ee2d7d67fe3dc6 100644 (file)
@@ -737,6 +737,13 @@ if test "$ac_cv_func_getaddrinfo" = yes; then
   AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function])
 fi
 
+dnl Check for the __sync_fetch_and_add builtin
+AC_CACHE_CHECK([for __sync_fetch_and_add], ac_cv_func_sync_fetch_and_add,
+[AC_TRY_LINK([],[int x;__sync_fetch_and_add(&x,1);],ac_cv_func_sync_fetch_and_add=yes,ac_cv_func_sync_fetch_and_add=no)])
+if test "$ac_cv_func_sync_fetch_and_add" = yes; then
+  AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD,1,[Define if you have the __sync_fetch_and_add function])
+fi
+
 AC_REPLACE_FUNCS(strlcat strlcpy getopt)
 AC_FUNC_UTIME_NULL
 AC_FUNC_ALLOCA
index 45ffea9cefc710b370abdccdf01470dd7e47cc3c..20868984c0451e61421c957157996cf68b879ee4 100644 (file)
@@ -94,8 +94,7 @@ void _crypt_extended_init_r(void)
        if (!initialized) {
 #ifdef PHP_WIN32
                InterlockedIncrement(&initialized);
-#elif (defined(__GNUC__) && !defined(__hpux) && !defined(__hppa__) && (__GNUC__ > 4 || \
-    (__GNUC__ == 4 && (__GNUC_MINOR__ > 1 || (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ > 1)))))
+#elif defined(HAVE_SYNC_FETCH_AND_ADD)
                __sync_fetch_and_add(&initialized, 1);
 #elif defined(HAVE_ATOMIC_H) /* Solaris 10 defines atomic API within */
                membar_producer();