summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--ext/opcache/ZendAccelerator.h11
-rw-r--r--ext/opcache/config.m470
-rw-r--r--sapi/cgi/cgi_main.c27
4 files changed, 69 insertions, 40 deletions
diff --git a/NEWS b/NEWS
index bdc0cd5fb6..c03d319056 100644
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,7 @@ PHP NEWS
imap). (ryotakatsuki at gmail dot com)
- OPcache:
+ . Added support for GNU Hurd. (Svante Signell)
. Added function opcache_compile_file() to load PHP scripts into cache
without execution. (Julien)
. Fixed bug #65665 (Exception not properly caught when opcache enabled).
diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h
index f223f126e4..b9d7ef3470 100644
--- a/ext/opcache/ZendAccelerator.h
+++ b/ext/opcache/ZendAccelerator.h
@@ -80,6 +80,9 @@
# endif
# include <direct.h>
#else
+# ifndef MAXPATHLEN
+# define MAXPATHLEN 4096
+# endif
# include <sys/param.h>
#endif
@@ -100,7 +103,7 @@ extern int lock_file;
# elif defined(__svr4__)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len}
-# elif defined(__linux__) || defined(__hpux)
+# elif defined(__linux__) || defined(__hpux) || defined(__GNU__)
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len, 0}
# elif defined(_AIX)
@@ -111,6 +114,12 @@ extern int lock_file;
# define FLOCK_STRUCTURE(name, type, whence, start, len) \
struct flock name = {type, whence, start, len}
# endif
+# 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
diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4
index 1798fe13fa..60edeed966 100644
--- a/ext/opcache/config.m4
+++ b/ext/opcache/config.m4
@@ -326,40 +326,42 @@ int main() {
msg=yes,msg=no,msg=no)
AC_MSG_RESULT([$msg])
- AC_MSG_CHECKING(for known struct flock definition)
- dnl Copied from ZendAccelerator.h
- AC_TRY_RUN([
-#include <fcntl.h>
-#include <stdlib.h>
-
-#ifndef ZEND_WIN32
-extern int lock_file;
-
-# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || (defined(__APPLE__) && defined(__MACH__)/* Darwin */) || defined(__OpenBSD__) || defined(__NetBSD__)
-# define FLOCK_STRUCTURE(name, type, whence, start, len) \
- struct flock name = {start, len, -1, type, whence}
-# elif defined(__svr4__)
-# define FLOCK_STRUCTURE(name, type, whence, start, len) \
- struct flock name = {type, whence, start, len}
-# elif defined(__linux__) || defined(__hpux)
-# define FLOCK_STRUCTURE(name, type, whence, start, len) \
- struct flock name = {type, whence, start, len, 0}
-# elif defined(_AIX)
-# if defined(_LARGE_FILES) || defined(__64BIT__)
-# define FLOCK_STRUCTURE(name, type, whence, start, len) \
- struct flock name = {type, whence, 0, 0, 0, start, len }
-# else
-# define FLOCK_STRUCTURE(name, type, whence, start, len) \
- struct flock name = {type, whence, start, len}
-# endif
-# else
-# error "Don't know how to define struct flock"
-# endif
-#endif
-int main() { return 0; }
-],
-[AC_MSG_RESULT([done])],
-[AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no])], [])
+flock_type=unknown
+AC_MSG_CHECKING("whether flock struct is linux ordered")
+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])
+ AC_MSG_RESULT("yes")
+], AC_MSG_RESULT("no") )
+
+AC_MSG_CHECKING("whether flock struct is BSD ordered")
+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])
+ AC_MSG_RESULT("yes")
+], AC_MSG_RESULT("no") )
+
+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 \
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index 4c78fcafec..4f3d5040e1 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -154,6 +154,7 @@ static const opt_struct OPTIONS[] = {
{'?', 0, "usage"},/* help alias (both '?' and 'usage') */
{'v', 0, "version"},
{'z', 1, "zend-extension"},
+ {'W', 1, "warmup"},
{'T', 1, "timing"},
{'-', 0, NULL} /* end of args */
};
@@ -1754,6 +1755,7 @@ int main(int argc, char *argv[])
int fcgi_fd = 0;
fcgi_request *request = NULL;
int repeats = 1;
+ int warmup_repeats = 0;
int benchmark = 0;
#if HAVE_GETTIMEOFDAY
struct timeval start, end;
@@ -2103,6 +2105,9 @@ consult the installation file that came with this distribution, or visit \n\
time(&start);
#endif
break;
+ case 'W':
+ warmup_repeats = atoi(php_optarg);
+ break;
case 'h':
case '?':
if (request) {
@@ -2516,12 +2521,24 @@ fastcgi_request_done:
if (!fastcgi) {
if (benchmark) {
- repeats--;
- if (repeats > 0) {
- script_file = NULL;
- php_optind = orig_optind;
- php_optarg = orig_optarg;
+ if (warmup_repeats) {
+ warmup_repeats--;
+ if (!warmup_repeats) {
+#ifdef HAVE_GETTIMEOFDAY
+ gettimeofday(&start, NULL);
+#else
+ time(&start);
+#endif
+ }
continue;
+ } else {
+ repeats--;
+ if (repeats > 0) {
+ script_file = NULL;
+ php_optind = orig_optind;
+ php_optarg = orig_optarg;
+ continue;
+ }
}
}
break;