APCu: Changelog

Version Message
5.1.22 - PHP 8.2 compatibility
- PHP 8.1 compatibility in apc.php
- Fix --enable-apcu-rwlocks configure option
- Enable transparent huge pages for mmap memory
- Use monotonic clock for TTL
5.1.21 - Fixed compatibility with PHP 8.1 by adding return types to APCUIterator.
- APCUIterator::current() and ::key() can no longer be called on an invalid iterator.
5.1.20 - Fix deadlocks when other apcu_* functions are used inside apcu_entry(). It should now be safe to use any functions inside the apcu_entry() callback.
- Fix division by zero exception in apc.php.
- Fix handling of references in PHP 8 if "default" serializer is used (which is not the default).
- Fix string reuse handling if "default" serializer is used (which is not the default).
- Check for failures when acquiring read locks to report problems earlier (write locks were already checked previously).
- Adjust tests for current PHP 8.1 development branch.
- Remove *_api.h headers. Use apc_cache.h instead of apc_cache_api.h etc.
5.1.19 - Fixed apcu_store() with integer keys (#388).
- Made apc.use_request_time=0 the default (#391).
- Made apcu compatible with PHP 8.0.
5.1.18 - Implement apcu_inc() and apcu_dec() using atomic operations. This means that these functions no longer have to acquire a write lock. These functions will now wraparound on overflow, instead of saturating to a floating point value.
- Make table header in apc.php sticky.
- Fix compile warnings related to mktemp() usage.
- Fix compatibility with PHP 8.0.
- Fix required number of arguments for apcu_store() returned by Reflection.
5.1.17 - Fixed compatibility with PHP 7.4 and PHP 8.0.
5.1.16 - Fix build on OSX.
5.1.15 - Restore apc.serializer=php as the default, as the "default" serializer still/again has issues.
- Fix possible issues in persistence of arrays with the "default" serializer.
- Attempt to reduce shared memory fragementation.
5.1.14 - Fixed GH #347: Disable slam defense by default.
- Fix potential issue with destruction of locks. This does not affect Linux, but might affect Windows and BSD.
- Use mutex instead of rwlock for shared memory allocator (if pthreads mutex available).
- Require only read-lock for apcu_cas(), by using atomic compare-and-swap.
5.1.13 - Reimplement persistence logic using precise allocation rather than memory pools. This reduces
memory usage of cache entries, especially for small values, and improves performance of persisting
and unpersisting values.
- Fixed GH #335: Stampede protection is broken.
- Fixed GH #328: Segfault in apcu_key_info() if APCu is disabled.
- Generally make the behavior of functions if APCu is disabled more consistent.
- Fixed PHP bug #72980: Empty strings are now consistently allowed as cache keys.
- Optimized apcu_key_info() and apcu_cache_info() by using interned strings.
- Fix build against PHP master (PHP 7.4).
- Many changes to internal C APIs.
5.1.12 - gh#307: Fix 'Timout' sort option (apc.php).
- gh#308: Keep search parameter on cache entry detail link (apc.php).
- Fix --enable-apcu-clear-signal support.
- Show entries with expired global TTL in APCuIterator.
- Respect TTL when calculating APCuIterator totals.
- The per-entry TTL now always takes precedence over the global TTL.
- The global TTL is now always relative to the access time.
- apcu_inc() and apcu_dec() no longer update hard-expired entries. Instead a new entry is created.
- Added optional $ttl argument to apcu_inc() and apcu_dec(), used when creating a new entry.
- PHP bug #76145: Fix use of APCu inside Serializer::(un)serialize().
- gh#304: If apcu_cas() is used on a non-existing entry, don't insert it.
- gh#295: Improve APCuIterator performance by using PCRE JIT and preallocating key strings.
- Reduce the memory overhead of cache entries.
- Prevent potential memory corruption in the cache slam defense implementation.
- Ensure cache entry references are released on bailout during unserialization.
- Make support for atomic operations a hard requirement for building APCu.
- Check write-lock acquisition for failure, to help debugging deadlock situations.
- Make sure apcu_inc/dec are atomic when working on a non-existing entry.
- Many changes to internal C APIs.
5.1.11 - fix gh#246 apcu_entry hangs
- fix gh#259 deadlock in apcu_store
- fix gh#281 undefined variable in apc.php
- fix handling of fatal errors in apcu_entry
- check string lengths when looking up keys
- many internal C APIs changed
5.1.10 - fix gh#247 when a NUL char is used as key, apcu_fetch(array) truncates the key
- fix gh#248 apcu_fetch may return values causing zend_mm_corruption or segfaults
when custom serializer is used
- fix gh#260 apcu.serializer=default results in segfault
- fix gh#274 non-portable shell == in config.m4
- fix crash when passing bad array to apcu_delete
- improve fix gh#266 refcounting errors in APCIterator
- fix for PHP 7.3 compatibility
5.1.9 - fix gh#234 mmap disabled when configure is called with --enable-apcu-mmap
- fix gh#226 Warning: apcu_fetch(): apc_fetch() expects a string or array of strings.
- mitigate gh#223 Fatal error when starting php on windows
- add support for PCRE2 in 7.3
- use row formatting for information in phpinfo() tables
- set IS_STR_PERSISTENT so refcounting failures are reported by -DRC_DEBUG=1
- fix gh#266 refcounting errors in APCIterator
5.1.8 - fix gh#207 Segmentation fault in apc_sma_api_free()
- fix gh#221 memory leak
- update to apc dashboard (Tyson Andre)
5.1.7 - fixes gh#19: hung apaches on pthread wrlocks
- fixes gh#203: segfaults in bailout / longjmp
5.1.6 - fixes gh#19: Hung apaches on pthread wrlocks
- fixes gh#188: Fix Segfault in ZTS build when locking (Tyson Andre)
- fixes gh#194: apcu_entry ttl not working
- fixes gh#189: SegFault in apc_copy_zval
- fixes gh#185: zend_mm_heap corrupted
- fixes gh#190: memory leak/failed check for duplicates
5.1.5 - fix version check in control panel page (gh#182, lennartwesdijk)
- do not create null strings, palloc may fail
5.1.4 - fix possible memory leak
- fix gh#168 drop trying to return strings from shm
- fix gh#170 do not create entries when serialization fails
5.1.3 - fixed macro using interlocked increment in Windows
- fix gh#158 apc_inc() with negative step value hangs the process
- fix gh#164 apc_inc() can take minutes with huge step value
5.1.2 - be really consistent with APC in use of atomics
5.1.0 - PHP 7 compatibility
- provide APC compatibility in "apc" optional extension
- move APCIterator to APC compatibility extension
- add APCuIterator without cache argument
- drop apcu_bin_* functions
- add apcu_entry(key, callback, ttl) function
- fix race on refcount of entry when using rwlocks (or on windows)
4.0.11 - fix #176 segfault when apc.preload_path contains bad data
- fix bad data used in test suite
4.0.10 - be really consistent with APC in use of atomics, avoid surprises
4.0.8 - fix inconsistent member names for entries in userland
- fix race on ref_count
4.0.7 - fix inconsistent member names for entries in userland
4.0.6 - fix issues with stddef inclusion causing compilation issue
4.0.5 - fix compile with 5.6 beta
4.0.4 - Fix deadlocking due to destroyed locks
- Fix various compatibility bugs
4.0.3 - Fix various compatibility problems
- Fix a few lingering faults
- Remove experimental eval serializer
- Fix iterator for compatibility
4.0.2 - Fixed bug #15 APC compatibility option broken. (Anatol)
- Fixed bug #20 APCu's APCIterator constructor is not compatable with APC. (Anatol)
- Fixed resource leak when data preload fails. (Anatol)
- Fixed issue #29 php_apcu.dll does not load anymore under X64. (Anatol)
4.0.1 - Fix crash in cli on apc_store where enable_cli=0
- Testing eval serializers
- Change apc_* to apcu_* in apc.php
- Fix exports in API
- Expose to userland whether APCu is compiled with the APC compatibility.
See the APCU_APC_FULL_BC constant. (Anatol)
- Fixed bin dump producing garbage data in multithreaded env. (Anatol)
4.0.0 All opcode caching abilities removed
The default locking is now rwlocks
APCu API installed in build environment