Changelog for APCu |
Release |
What has changed? |
5.1.25 |
- If the cache is full, try to clean up expired entries based on their per-entry hard TTL even
if the soft apc.ttl is 0. Previously the entire cache was discarded.
- If a new entry cannot be inserted due to fragmentation, the cache will be defragmented,
combining many small free blocks into one big free block by moving around cache entries.
This avoids the need to discard the entire cache in more cases.
- The access time (which is used by the soft apc.ttl) is now also updated when using
apcu_exists().
- apc.entries_hint now defaults to 512 entries per 1MB of shared memory. Previously the
default was 4096, independent of shm_size. This could lead to a large number of hash
collisions if shm_size was increased without also increasing entries_hint.
- Added apc.mmap_hugepage_size to use huge pages of a certain size for the apcu shared memory
segment. This requires support for huge pages to be enabled in the kernel. Note that even if
this option is not set, shared memory is still configured to use transparent huge pages.
- The apc.shm_segments ini option has been removed. Multiple SHM segments are no longer
supported. (They were already not supported when using mmap, which is the default mode of
operation)
- The apc.smart configuration setting should now work more reliably. Values > 1 can be used
to increase the chance of discarding the entire cache when the amount of memory freed by
removing expired entries was too small. This could be useful if performance degrades due to
executing the logic to remove expired entries (+ defragmentation) too frequently during
periods of high memory usage.
- The number of cache cleanups performed (removal of expired entries) is now available
in the array returned by apcu_cache_info() (via array key "cleanups").
- The number of defragmentations performed is now available in the array returned by
apcu_cache_info() (via array key "defragmentations").
- Fixed several issues that caused inserting new entries to fail unexpectedly.
Internal changes:
- Fixed -Wclobbered compiler warnings.
- All cache data structures are now relocatable, i.e. independent of the base address of the
cache. This enables defragmentation support.
- Hash slots now use doubly linked lists. This is necessary for defragmentation. |
5.1.24 |
- Make compatible with PHP 8.4.
- apc.php: Preserve search parameter when deleting entry.
- apc.PHP: Allow arbitrary search regex. |
5.1.23 |
- Revert use of monotonic clock for TTL (#451)
- Fix a crash when serializing packed arrays (e.g. lists) in PHP 8.2+ with `apc.serializer=default`.
- Reduce memory usage when serializing packed arrays (e.g. lists) in PHP 8.2+ with `apc.serializer=default`.
- Speed up serializing arrays with `apc.serializer=default`.
- Reduce memory usage when unserializing instances of the empty array in PHP 7.3+.
- Removed no longer working apcue extension.
- Increased limit on maximum number of slots.
- Made tests compatible with PHP 8.3. |
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 |
4.0.11 |
- fix #176 segfault when apc.preload_path contains bad data
- fix bad data used in test suite |
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 |
4.0.10 |
- be really consistent with APC in use of atomics, avoid surprises |
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.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
Please see TECHNOTES/README.md |