? views-1003716.patch Index: includes/cache.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/views/includes/cache.inc,v retrieving revision 1.25.2.4 diff -u -p -r1.25.2.4 cache.inc --- includes/cache.inc 12 Mar 2010 01:51:47 -0000 1.25.2.4 +++ includes/cache.inc 24 Dec 2010 05:15:37 -0000 @@ -100,20 +100,29 @@ function _views_discover_default_views() static $cache = NULL; if (!isset($cache)) { + // Wait for the cache to be rebuilt. + lock_wait('views_default_cache'); + $index = views_cache_get('views_default_views_index', TRUE); + $views_cache_bad = TRUE; // Retrieve each cached default view if (isset($index->data) && is_array($index->data)) { $cache = array(); + $views_cache_bad = FALSE; foreach ($index->data as $view_name) { $data = views_cache_get('views_default:' . $view_name, TRUE); if (isset($data->data) && is_object($data->data)) { $cache[$view_name] = $data->data; } + else { + $views_cache_bad = TRUE; + break; + } } } // If missing index, rebuild the cache - else { + if ($views_cache_bad) { views_include_default_views(); $cache = array(); @@ -139,13 +148,16 @@ function _views_discover_default_views() // Allow modules to modify default views before they are cached. drupal_alter('views_default_views', $cache); - // Cache the index - $index = array_keys($cache); - views_cache_set('views_default_views_index', $index, TRUE); - - // Cache each view - foreach ($cache as $name => $view) { - views_cache_set('views_default:' . $name, $view, TRUE); + // Accquire a lock for writing to the view cache. + if (lock_acquire('views_default_cache')) { + // Cache the index + $index = array_keys($cache); + views_cache_set('views_default_views_index', $index, TRUE); + + // Cache each view + foreach ($cache as $name => $view) { + views_cache_set('views_default:' . $name, $view, TRUE); + } } } }