]> granicus.if.org Git - php/commitdiff
Avoid dependency on "struct flock" fields order.
authorDmitry Stogov <dmitry@zend.com>
Tue, 12 Feb 2019 07:15:16 +0000 (10:15 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 12 Feb 2019 07:15:16 +0000 (10:15 +0300)
ext/opcache/ZendAccelerator.c
ext/opcache/ZendAccelerator.h
ext/opcache/config.m4
ext/opcache/zend_shared_alloc.c

index 46a86a31099766efc1a48cee5f34f102d1d3df0c..601e3af0cffdcb97957cc7dbfeeefec23b7a7050 100644 (file)
@@ -230,11 +230,12 @@ static inline void accel_restart_enter(void)
 #ifdef ZEND_WIN32
        INCREMENT(restart_in);
 #else
-# ifdef _AIX
-       static FLOCK_STRUCTURE(restart_in_progress, F_WRLCK, SEEK_SET, 2, 1);
-# else
-       static const FLOCK_STRUCTURE(restart_in_progress, F_WRLCK, SEEK_SET, 2, 1);
-#endif
+       struct flock restart_in_progress;
+
+       restart_in_progress.l_type = F_WRLCK;
+       restart_in_progress.l_whence = SEEK_SET;
+       restart_in_progress.l_start = 2;
+       restart_in_progress.l_len = 1;
 
        if (fcntl(lock_file, F_SETLK, &restart_in_progress) == -1) {
                zend_accel_error(ACCEL_LOG_DEBUG, "RestartC(+1):  %s (%d)", strerror(errno), errno);
@@ -249,11 +250,12 @@ static inline void accel_restart_leave(void)
        ZCSG(restart_in_progress) = 0;
        DECREMENT(restart_in);
 #else
-# ifdef _AIX
-       static FLOCK_STRUCTURE(restart_finished, F_UNLCK, SEEK_SET, 2, 1);
-# else
-       static const FLOCK_STRUCTURE(restart_finished, F_UNLCK, SEEK_SET, 2, 1);
-# endif
+       struct flock restart_finished;
+
+       restart_finished.l_type = F_UNLCK;
+       restart_finished.l_whence = SEEK_SET;
+       restart_finished.l_start = 2;
+       restart_finished.l_len = 1;
 
        ZCSG(restart_in_progress) = 0;
        if (fcntl(lock_file, F_SETLK, &restart_finished) == -1) {
@@ -266,7 +268,12 @@ static inline int accel_restart_is_active(void)
 {
        if (ZCSG(restart_in_progress)) {
 #ifndef ZEND_WIN32
-               FLOCK_STRUCTURE(restart_check, F_WRLCK, SEEK_SET, 2, 1);
+               struct flock restart_check;
+
+               restart_check.l_type = F_WRLCK;
+               restart_check.l_whence = SEEK_SET;
+               restart_check.l_start = 2;
+               restart_check.l_len = 1;
 
                if (fcntl(lock_file, F_GETLK, &restart_check) == -1) {
                        zend_accel_error(ACCEL_LOG_DEBUG, "RestartC:  %s (%d)", strerror(errno), errno);
@@ -291,11 +298,12 @@ static inline int accel_activate_add(void)
 #ifdef ZEND_WIN32
        INCREMENT(mem_usage);
 #else
-# ifdef _AIX
-       static FLOCK_STRUCTURE(mem_usage_lock, F_RDLCK, SEEK_SET, 1, 1);
-# else
-       static const FLOCK_STRUCTURE(mem_usage_lock, F_RDLCK, SEEK_SET, 1, 1);
-# endif
+       struct flock mem_usage_lock;
+
+       mem_usage_lock.l_type = F_RDLCK;
+       mem_usage_lock.l_whence = SEEK_SET;
+       mem_usage_lock.l_start = 1;
+       mem_usage_lock.l_len = 1;
 
        if (fcntl(lock_file, F_SETLK, &mem_usage_lock) == -1) {
                zend_accel_error(ACCEL_LOG_DEBUG, "UpdateC(+1):  %s (%d)", strerror(errno), errno);
@@ -314,11 +322,12 @@ static inline void accel_deactivate_sub(void)
                ZCG(counted) = 0;
        }
 #else
-# ifdef _AIX
-       static FLOCK_STRUCTURE(mem_usage_unlock, F_UNLCK, SEEK_SET, 1, 1);
-# else
-       static const FLOCK_STRUCTURE(mem_usage_unlock, F_UNLCK, SEEK_SET, 1, 1);
-# endif
+       struct flock mem_usage_unlock;
+
+       mem_usage_unlock.l_type = F_UNLCK;
+       mem_usage_unlock.l_whence = SEEK_SET;
+       mem_usage_unlock.l_start = 1;
+       mem_usage_unlock.l_len = 1;
 
        if (fcntl(lock_file, F_SETLK, &mem_usage_unlock) == -1) {
                zend_accel_error(ACCEL_LOG_DEBUG, "UpdateC(-1):  %s (%d)", strerror(errno), errno);
@@ -331,11 +340,12 @@ static inline void accel_unlock_all(void)
 #ifdef ZEND_WIN32
        accel_deactivate_sub();
 #else
-# ifdef _AIX
-       static FLOCK_STRUCTURE(mem_usage_unlock_all, F_UNLCK, SEEK_SET, 0, 0);
-# else
-       static const FLOCK_STRUCTURE(mem_usage_unlock_all, F_UNLCK, SEEK_SET, 0, 0);
-# endif
+       struct flock mem_usage_unlock_all;
+
+       mem_usage_unlock_all.l_type = F_UNLCK;
+       mem_usage_unlock_all.l_whence = SEEK_SET;
+       mem_usage_unlock_all.l_start = 0;
+       mem_usage_unlock_all.l_len = 0;
 
        if (fcntl(lock_file, F_SETLK, &mem_usage_unlock_all) == -1) {
                zend_accel_error(ACCEL_LOG_DEBUG, "UnlockAll:  %s (%d)", strerror(errno), errno);
@@ -730,8 +740,12 @@ static inline int accel_is_inactive(void)
                return SUCCESS;
        }
 #else
-       FLOCK_STRUCTURE(mem_usage_check, F_WRLCK, SEEK_SET, 1, 1);
+       struct flock mem_usage_check;
 
+       mem_usage_check.l_type = F_WRLCK;
+       mem_usage_check.l_whence = SEEK_SET;
+       mem_usage_check.l_start = 1;
+       mem_usage_check.l_len = 1;
        mem_usage_check.l_pid = -1;
        if (fcntl(lock_file, F_GETLK, &mem_usage_check) == -1) {
                zend_accel_error(ACCEL_LOG_DEBUG, "UpdateC:  %s (%d)", strerror(errno), errno);
index 685d9e29cb9ab15d759e77dc973de6d975edbd70..5f195ba3bcf5d8bd50cd28e8646d1b210e041fe0 100644 (file)
 /*** file locking ***/
 #ifndef ZEND_WIN32
 extern int lock_file;
-
-# if defined(HAVE_FLOCK_AIX64)
-#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
-               struct flock name = {type, whence, 0, 0, 0, start, len }
-# elif defined(HAVE_FLOCK_BSD)
-#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
-               struct flock name = {start, len, -1, type, whence}
-# elif defined(HAVE_FLOCK_LINUX)
-#  define FLOCK_STRUCTURE(name, type, whence, start, len) \
-               struct flock name = {type, whence, start, len}
-# else
-#  error "Don't know how to define struct flock"
-# endif
 #endif
 
 #if defined(HAVE_OPCACHE_FILE_CACHE) && defined(ZEND_WIN32)
index ec14487c123691f0a400a32cde828b0ad096d575..aa50d561164b9e8eb4a0956e51797bd933eb75c0 100644 (file)
@@ -343,63 +343,6 @@ int main() {
     msg=yes,msg=no,msg=no)
   AC_MSG_RESULT([$msg])
 
-flock_type=unknown
-AC_MSG_CHECKING(for struct flock layout)
-
-if test "$flock_type" = "unknown"; then
-AC_TRY_RUN([
-  #include <fcntl.h>
-  struct flock lock = { 1, 2, 3, 4, 5, 6, 7 };
-  int main() {
-    if(lock.l_type == 1 && lock.l_whence == 2 && lock.l_start == 6 && lock.l_len== 7) {
-               return 0;
-    }
-    return 1;
-  }
-], [
-    flock_type=aix64
-    AC_DEFINE([HAVE_FLOCK_AIX64], [], [Struct flock is 64-bit AIX-type])
-], [])
-fi
-
-if test "$flock_type" = "unknown"; then
-AC_TRY_RUN([
-  #include <fcntl.h>
-  struct flock lock = { 1, 2, 3, 4, 5 };
-  int main() {
-    if(lock.l_type == 1 && lock.l_whence == 2 && lock.l_start == 3 && lock.l_len == 4) {
-               return 0;
-    }
-    return 1;
-  }
-], [
-       flock_type=linux
-    AC_DEFINE([HAVE_FLOCK_LINUX], [], [Struct flock is Linux-type])
-], [])
-fi
-
-if test "$flock_type" = "unknown"; then
-AC_TRY_RUN([
-  #include <fcntl.h>
-  struct flock lock = { 1, 2, 3, 4, 5 };
-  int main() {
-    if(lock.l_start == 1 && lock.l_len == 2 && lock.l_type == 4 && lock.l_whence == 5) {
-               return 0;
-    }
-    return 1;
-  }
-], [
-       flock_type=bsd
-    AC_DEFINE([HAVE_FLOCK_BSD], [], [Struct flock is BSD-type])
-], [])
-fi
-
-AC_MSG_RESULT([$flock_type])
-
-if test "$flock_type" = "unknown"; then
-       AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no])
-fi
-
   PHP_NEW_EXTENSION(opcache,
        ZendAccelerator.c \
        zend_accelerator_blacklist.c \
index 249d99022a493c94da021d1a7f1ff099229ef140..f2415feaffc00771e12169e8794fc44924dd19d2 100644 (file)
@@ -371,15 +371,15 @@ void zend_shared_alloc_safe_unlock(void)
        }
 }
 
-#ifndef ZEND_WIN32
-/* name l_type l_whence l_start l_len */
-static FLOCK_STRUCTURE(mem_write_lock, F_WRLCK, SEEK_SET, 0, 1);
-static FLOCK_STRUCTURE(mem_write_unlock, F_UNLCK, SEEK_SET, 0, 1);
-#endif
-
 void zend_shared_alloc_lock(void)
 {
 #ifndef ZEND_WIN32
+       struct flock mem_write_lock;
+
+       mem_write_lock.l_type = F_WRLCK;
+       mem_write_lock.l_whence = SEEK_SET;
+       mem_write_lock.l_start = 0;
+       mem_write_lock.l_len = 1;
 
 #ifdef ZTS
        tsrm_mutex_lock(zts_lock);
@@ -410,6 +410,15 @@ void zend_shared_alloc_lock(void)
 
 void zend_shared_alloc_unlock(void)
 {
+#ifndef ZEND_WIN32
+       struct flock mem_write_unlock;
+
+       mem_write_unlock.l_type = F_UNLCK;
+       mem_write_unlock.l_whence = SEEK_SET;
+       mem_write_unlock.l_start = 0;
+       mem_write_unlock.l_len = 1;
+#endif
+
        ZCG(locked) = 0;
 
 #ifndef ZEND_WIN32