Index: modules/block/block.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.admin.inc,v retrieving revision 1.63 diff -u -p -r1.63 block.admin.inc --- modules/block/block.admin.inc 19 Nov 2009 04:00:47 -0000 1.63 +++ modules/block/block.admin.inc 30 Nov 2009 08:15:55 -0000 @@ -423,6 +423,7 @@ function block_admin_configure_submit($f module_invoke($form_state['values']['module'], 'block_save', $form_state['values']['delta'], $form_state['values']); drupal_set_message(t('The block configuration has been saved.')); cache_clear_all(); + cache_clear_all('block_info_alter', 'cache_bootstrap'); $form_state['redirect'] = 'admin/structure/block'; } } Index: modules/block/block.module =================================================================== RCS file: /cvs/drupal/drupal/modules/block/block.module,v retrieving revision 1.400 diff -u -p -r1.400 block.module --- modules/block/block.module 22 Nov 2009 21:24:37 -0000 1.400 +++ modules/block/block.module 30 Nov 2009 08:15:55 -0000 @@ -658,18 +658,25 @@ function _block_load_blocks() { function block_block_info_alter(&$blocks) { global $user, $theme_key; - // Build an array of roles for each block. - $block_roles = array(); - $result = db_query('SELECT module, delta, rid FROM {block_role}'); - foreach ($result as $record) { - $block_roles[$record->module][$record->delta][] = $record->rid; + if ($cached = cache_get('block_info_alter', 'cache_bootstrap')) { + $block_roles = $cached->data['roles']; + $block_node_types = $cached->data['node_types']; } + else { + // Build an array of roles for each block. + $block_roles = array(); + $result = db_query('SELECT module, delta, rid FROM {block_role}'); + foreach ($result as $record) { + $block_roles[$record->module][$record->delta][] = $record->rid; + } - // Build an array of node types for each block. - $block_node_types = array(); - $result = db_query('SELECT module, delta, type FROM {block_node_type}'); - foreach ($result as $record) { - $block_node_types[$record->module][$record->delta][] = $record->type; + // Build an array of node types for each block. + $block_node_types = array(); + $result = db_query('SELECT module, delta, type FROM {block_node_type}'); + foreach ($result as $record) { + $block_node_types[$record->module][$record->delta][] = $record->type; + } + cache_set('block_info_alter', array('roles' => $block_roles, 'node_types' => $block_node_types), 'cache_bootstrap'); } foreach ($blocks as $key => $block) {