From 690a21552b58a9967cfcec480c651973de3fcfd8 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Sat, 9 Jan 2016 10:39:35 +0100 Subject: php-pecl-apcu: 5.1.2-2, upstream patches for apcu_inc / apcu_dec --- apcu-upstream.patch | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 apcu-upstream.patch (limited to 'apcu-upstream.patch') diff --git a/apcu-upstream.patch b/apcu-upstream.patch new file mode 100644 index 0000000..b21aeb6 --- /dev/null +++ b/apcu-upstream.patch @@ -0,0 +1,227 @@ +diff --git a/apc_globals.h b/apc_globals.h +index 40509f0..a0de234 100644 +--- a/apc_globals.h ++++ b/apc_globals.h +@@ -41,12 +41,12 @@ + ZEND_BEGIN_MODULE_GLOBALS(apcu) + /* configuration parameters */ + zend_bool enabled; /* if true, apc is enabled (defaults to true) */ +- long shm_segments; /* number of shared memory segments to use */ +- long shm_size; /* size of each shared memory segment (in MB) */ +- long entries_hint; /* hint at the number of entries expected */ +- long gc_ttl; /* parameter to apc_cache_create */ +- long ttl; /* parameter to apc_cache_create */ +- long smart; /* smart value */ ++ zend_long shm_segments; /* number of shared memory segments to use */ ++ zend_long shm_size; /* size of each shared memory segment (in MB) */ ++ zend_long entries_hint; /* hint at the number of entries expected */ ++ zend_long gc_ttl; /* parameter to apc_cache_create */ ++ zend_long ttl; /* parameter to apc_cache_create */ ++ zend_long smart; /* smart value */ + + #if APC_MMAP + char *mmap_file_mask; /* mktemp-style file-mask to pass to mmap */ +diff --git a/php_apc.c b/php_apc.c +index c35ede1..83fd758 100644 +--- a/php_apc.c ++++ b/php_apc.c +@@ -118,11 +118,11 @@ static PHP_INI_MH(OnUpdateShmSize) /* {{{ */ + return FAILURE; + } + +- if (s < 1048576L) { ++ if (s < Z_L(1048576)) { + /* if it's less than 1Mb, they are probably using the old syntax */ + php_error_docref( + NULL, E_WARNING, "apc.shm_size now uses M/G suffixes, please update your ini files"); +- s = s * 1048576L; ++ s = s * Z_L(1048576); + } + + APCG(shm_size) = s; +@@ -526,60 +526,46 @@ PHP_FUNCTION(apcu_add) { + /* {{{ php_inc_updater */ + + struct php_inc_updater_args { +- zend_long step; +- zend_long lval; ++ zval step; ++ zval rval; + }; + + static zend_bool php_inc_updater(apc_cache_t* cache, apc_cache_entry_t* entry, void* data) { + struct php_inc_updater_args *args = (struct php_inc_updater_args*) data; + + if (Z_TYPE(entry->val) == IS_LONG) { +- while (args->step--) { +- fast_long_increment_function(&entry->val); +- } +- args->lval = Z_LVAL(entry->val); ++ fast_long_add_function(&entry->val, &entry->val, &args->step); ++ ZVAL_COPY_VALUE(&args->rval, &entry->val); + return 1; + } + + return 0; + } + +-static zend_bool php_dec_updater(apc_cache_t* cache, apc_cache_entry_t* entry, void* data) { +- struct php_inc_updater_args *args = (struct php_inc_updater_args*) data; +- +- if (Z_TYPE(entry->val) == IS_LONG) { +- while (args->step--) { +- fast_long_decrement_function(&entry->val); +- } +- args->lval = Z_LVAL(entry->val); +- return 1; +- } +- +- return 0; +-} +-/* }}} */ +- + /* {{{ proto long apc_inc(string key [, long step [, bool& success]]) + */ + PHP_FUNCTION(apcu_inc) { + zend_string *key; +- struct php_inc_updater_args args = {1L, -1}; ++ struct php_inc_updater_args args; ++ zend_long step = 1; + zval *success = NULL; + +- if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|lz", &key, &(args.step), &success) == FAILURE) { ++ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|lz", &key, &step, &success) == FAILURE) { + return; + } +- ++ + if (success) { + ZVAL_DEREF(success); + zval_ptr_dtor(success); + } + ++ ZVAL_LONG(&args.step, step); ++ + if (php_apc_update(key, php_inc_updater, &args)) { + if (success) { + ZVAL_TRUE(success); + } +- RETURN_LONG(args.lval); ++ RETURN_ZVAL(&args.rval, 0, 0); + } + + if (success) { +@@ -594,24 +580,27 @@ PHP_FUNCTION(apcu_inc) { + */ + PHP_FUNCTION(apcu_dec) { + zend_string *key; +- struct php_inc_updater_args args = {1L, -1}; ++ struct php_inc_updater_args args; ++ zend_long step = 1; + zval *success = NULL; + +- if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|lz", &key, &(args.step), &success) == FAILURE) { ++ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|lz", &key, &step, &success) == FAILURE) { + return; + } +- ++ + if (success) { + ZVAL_DEREF(success); + zval_ptr_dtor(success); + } + +- if (php_apc_update(key, php_dec_updater, &args)) { ++ ZVAL_LONG(&args.step, 0 - step); ++ ++ if (php_apc_update(key, php_inc_updater, &args)) { + if (success) { + ZVAL_TRUE(success); + } + +- RETURN_LONG(args.lval); ++ RETURN_ZVAL(&args.rval, 0, 0); + } + + if (success) { +@@ -662,9 +651,7 @@ PHP_FUNCTION(apcu_cas) { + PHP_FUNCTION(apcu_fetch) { + zval *key; + zval *success = NULL; +- apc_cache_entry_t* entry; + time_t t; +- apc_context_t ctxt = {0,}; + + if (!APCG(enabled)) { + RETURN_FALSE; +diff --git a/tests/apc_012.phpt b/tests/apc_012.phpt +index e7844ef..0d3b050 100644 +--- a/tests/apc_012.phpt ++++ b/tests/apc_012.phpt +@@ -10,25 +10,28 @@ apc.enable_cli=1 + $key="testkey"; + $i=PHP_INT_MAX; + apcu_store($key, $i); +-$j=apcu_fetch($key); ++var_dump($j=apcu_fetch($key)); + var_dump($i==$j); + + apcu_inc($key, 1); + $i++; +-$j=apcu_fetch($key); ++var_dump($j=apcu_fetch($key)); + var_dump($i==$j); + + $i=PHP_INT_MIN; + apcu_store($key, $i); + apcu_dec($key, 1); + $i--; +-$j=apcu_fetch($key); ++var_dump($j=apcu_fetch($key)); + var_dump($i==$j); + ?> + ===DONE=== + +---EXPECT-- ++--EXPECTF-- ++int(%d) + bool(true) ++float(%s) + bool(true) ++float(%s) + bool(true) + ===DONE=== +diff --git a/tests/apc_inc_perf.phpt b/tests/apc_inc_perf.phpt +new file mode 100644 +index 0000000..8f082f1 +--- /dev/null ++++ b/tests/apc_inc_perf.phpt +@@ -0,0 +1,28 @@ ++--TEST-- ++APC: apcu_inc/apcu_dec performance test (gh#164) ++--SKIPIF-- ++ ++--INI-- ++apc.enabled=1 ++apc.enable_cli=1 ++apc.file_update_protection=0 ++--FILE-- ++ ++===DONE=== ++ ++--EXPECTF-- ++int(1985229329) ++int(1) ++int(1000000000) ++int(1) ++bool(true) ++===DONE=== -- cgit