diff options
author | Dmitry Stogov <dmitry@zend.com> | 2019-02-12 10:22:13 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2019-02-12 10:22:13 +0300 |
commit | 26e26969c1abd062d56aaf8650240d54fae5d9f3 (patch) | |
tree | 5a2db3bb300d1b876c02ad9debb7bccaf7b78f3d | |
parent | 8724f9b38ea3ba9a3ecea5488515f6b854fa5dc6 (diff) | |
parent | 470f5891d48cad64fd73dbb34775b3bcce1337cf (diff) | |
download | php-git-26e26969c1abd062d56aaf8650240d54fae5d9f3.tar.gz |
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
Avoid dependency on "struct flock" fields order.
-rw-r--r-- | ext/opcache/ZendAccelerator.c | 68 | ||||
-rw-r--r-- | ext/opcache/ZendAccelerator.h | 13 | ||||
-rw-r--r-- | ext/opcache/config.m4 | 57 | ||||
-rw-r--r-- | ext/opcache/zend_shared_alloc.c | 21 |
4 files changed, 56 insertions, 103 deletions
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 6d4dedc4cb..ad9e3aa5a9 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -238,11 +238,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); @@ -257,11 +258,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) { @@ -274,7 +276,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); @@ -299,11 +306,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); @@ -322,11 +330,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); @@ -339,11 +348,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); @@ -812,8 +822,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); diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h index 47ce1bb9f4..e281d675f9 100644 --- a/ext/opcache/ZendAccelerator.h +++ b/ext/opcache/ZendAccelerator.h @@ -89,19 +89,6 @@ /*** 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(ZEND_WIN32) diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4 index fedf31bcca..8fefd5b5a2 100644 --- a/ext/opcache/config.m4 +++ b/ext/opcache/config.m4 @@ -334,63 +334,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_RUN_IFELSE([AC_LANG_SOURCE([[ - #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_RUN_IFELSE([AC_LANG_SOURCE([[ - #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_RUN_IFELSE([AC_LANG_SOURCE([[ - #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 \ diff --git a/ext/opcache/zend_shared_alloc.c b/ext/opcache/zend_shared_alloc.c index 9f71cf6736..177cbcc46f 100644 --- a/ext/opcache/zend_shared_alloc.c +++ b/ext/opcache/zend_shared_alloc.c @@ -435,15 +435,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); @@ -474,6 +474,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 |