Commit 4f8168c3 authored by webchick's avatar webchick

#338184 by Damien Tournoud: Remove special workarounds for serialize() in the registry.

parent bc719d0c
...@@ -1480,7 +1480,10 @@ function _registry_check_code($type, $name = NULL) { ...@@ -1480,7 +1480,10 @@ function _registry_check_code($type, $name = NULL) {
static $lookup_cache, $cache_update_needed; static $lookup_cache, $cache_update_needed;
if (!isset($lookup_cache)) { if (!isset($lookup_cache)) {
$lookup_cache = _registry_get_lookup_cache(); $lookup_cache = array();
if ($cache = cache_get('lookup_cache', 'cache_registry')) {
$lookup_cache = $cache->data;
}
} }
// When we rebuild the registry, we need to reset this cache so // When we rebuild the registry, we need to reset this cache so
...@@ -1495,7 +1498,7 @@ function _registry_check_code($type, $name = NULL) { ...@@ -1495,7 +1498,7 @@ function _registry_check_code($type, $name = NULL) {
// changes to the lookup cache for this request. // changes to the lookup cache for this request.
if ($type == REGISTRY_WRITE_LOOKUP_CACHE) { if ($type == REGISTRY_WRITE_LOOKUP_CACHE) {
if ($cache_update_needed) { if ($cache_update_needed) {
_registry_set_lookup_cache($lookup_cache); cache_set('lookup_cache', $lookup_cache, 'cache_registry');
} }
return; return;
} }
...@@ -1546,38 +1549,6 @@ function registry_rebuild() { ...@@ -1546,38 +1549,6 @@ function registry_rebuild() {
_registry_rebuild(); _registry_rebuild();
} }
/**
* Wrapper function to perform array to string conversion of lookup cache.
*/
function _registry_set_lookup_cache(array $lookup_cache) {
// Cache a string, not an array, so we can avoid the memory usage hit
// from serialize() in the cache system.
$key_value_pairs = array();
foreach ($lookup_cache as $key => $value) {
$key_value_pairs[] = "$key|" . ($value ? $value : '');
}
return cache_set('lookup_cache', implode(';', $key_value_pairs), 'cache_registry');
}
/**
* Wrapper function to perform string to array conversion of lookup cache.
*/
function _registry_get_lookup_cache() {
// In _registry_set_lookup_cache, we cache a string, not an array, to avoid
// serialize() in the cache system. serialize() makes a copy, and thus uses
// extra memory, which we are trying to avoid.
$lookup_cache = array();
if ($cache = cache_get('lookup_cache', 'cache_registry')) {
// Each item is separated by ';'.
foreach (explode(';', $cache->data) as $lookup) {
// Key value pairs are separated by '|'.
list($resource, $result) = explode('|', $lookup);
$lookup_cache[$resource] = $result;
}
}
return $lookup_cache;
}
/** /**
* @} End of "ingroup registry". * @} End of "ingroup registry".
*/ */
...@@ -72,7 +72,11 @@ function _registry_rebuild() { ...@@ -72,7 +72,11 @@ function _registry_rebuild() {
$parsed_files = _registry_parse_files($files); $parsed_files = _registry_parse_files($files);
$unchanged_resources = array(); $unchanged_resources = array();
foreach (_registry_get_lookup_cache() as $key => $file) { $lookup_cache = array();
if ($cache = cache_get('lookup_cache', 'cache_registry')) {
$lookup_cache = $cache->data;
}
foreach ($lookup_cache as $key => $file) {
// If the file for this cached resource is carried over unchanged from // If the file for this cached resource is carried over unchanged from
// the last registry build, then we can safely re-cache it. // the last registry build, then we can safely re-cache it.
if ($file && in_array($file, array_keys($files)) && !in_array($file, $parsed_files)) { if ($file && in_array($file, array_keys($files)) && !in_array($file, $parsed_files)) {
...@@ -87,7 +91,7 @@ function _registry_rebuild() { ...@@ -87,7 +91,7 @@ function _registry_rebuild() {
// We have some unchanged resources, warm up the cache - no need to pay // We have some unchanged resources, warm up the cache - no need to pay
// for looking them up again. // for looking them up again.
if (count($unchanged_resources) > 0) { if (count($unchanged_resources) > 0) {
_registry_set_lookup_cache($unchanged_resources); cache_set('lookup_cache', $unchanged_resources, 'cache_registry');
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment