? .cvsignore ? 147000-protect-rebuild-74-D6.patch ? 147000-protect-rebuild-81-D6.patch ? log.txt ? sites/8888.127.0.0.1 ? sites/all/apachesolr-6x-2x ? sites/all/modules ? sites/all/themes ? sites/default/files ? sites/default/files2 ? sites/default/settings.php Index: install.php =================================================================== RCS file: /cvs/drupal/drupal/install.php,v retrieving revision 1.113.2.13 diff -u -p -r1.113.2.13 install.php --- install.php 6 Dec 2010 06:50:56 -0000 1.113.2.13 +++ install.php 16 Dec 2010 05:33:25 -0000 @@ -131,6 +131,12 @@ function install_main() { if (!$verify) { install_change_settings($profile, $install_locale); } + // The default lock implementation uses a database table, + // so we cannot use it for install, but we still need + // the API functions available. + require_once './includes/lock-install.inc'; + $conf['lock_inc'] = './includes/lock-install.inc'; + lock_init(); // Install system.module. drupal_install_system(); Index: includes/lock-install.inc =================================================================== RCS file: includes/lock-install.inc diff -N includes/lock-install.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ includes/lock-install.inc 16 Dec 2010 05:33:25 -0000 @@ -0,0 +1,64 @@ +info = $file->info + $defaults; // Invoke hook_system_info_alter() to give installed modules a chance to // modify the data in the .info files if necessary. drupal_alter('system_info', $files[$filename]->info, $files[$filename]); - // Log the critical hooks implemented by this module. - $bootstrap = 0; - foreach (bootstrap_hooks() as $hook) { - if (module_hook($file->name, $hook)) { - $bootstrap = 1; - break; + // Merge in defaults and save. + $files[$filename]->info = $file->info + $defaults; + } + + // If lock not acquired, return $files data without writing to database. + if ($write_database) { + foreach ($files as $filename => $file) { + // Log the critical hooks implemented by this module. + $bootstrap = 0; + foreach (bootstrap_hooks() as $hook) { + if (module_hook($file->name, $hook)) { + $bootstrap = 1; + break; + } } - } - // Update the contents of the system table: - if (isset($file->status) || (isset($file->old_filename) && $file->old_filename != $file->filename)) { - db_query("UPDATE {system} SET info = '%s', name = '%s', filename = '%s', bootstrap = %d WHERE filename = '%s'", serialize($files[$filename]->info), $file->name, $file->filename, $bootstrap, $file->old_filename); - } - else { - // This is a new module. - $files[$filename]->status = 0; - $files[$filename]->throttle = 0; - db_query("INSERT INTO {system} (name, info, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d)", $file->name, serialize($files[$filename]->info), 'module', $file->filename, 0, 0, $bootstrap); + // Update the contents of the system table: + if (isset($file->status)) { + db_query("UPDATE {system} SET info = '%s', name = '%s', filename = '%s', bootstrap = %d WHERE filename = '%s'", serialize($files[$filename]->info), $file->name, $file->filename, $bootstrap, $file->old_filename); + } + else { + // This is a new module. + $files[$filename]->status = 0; + $files[$filename]->throttle = 0; + db_query("INSERT INTO {system} (name, info, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', %d, %d, %d)", $file->name, serialize($files[$filename]->info), 'module', $file->filename, 0, 0, $bootstrap); + } } + lock_release('module_rebuild_cache'); } $files = _module_build_dependencies($files); return $files; Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.585.2.58 diff -u -p -r1.585.2.58 system.module --- modules/system/system.module 15 Dec 2010 14:50:25 -0000 1.585.2.58 +++ modules/system/system.module 16 Dec 2010 05:33:25 -0000 @@ -806,22 +806,48 @@ function system_theme_default() { * Array of all available themes and their data. */ function system_theme_data() { + $write_database = TRUE; + // If lock not acquired, return $files data without writing to database. + if (!lock_acquire('system_theme_data')) { + $write_database = FALSE; + // Wait for the parallel thread to be done so we are more likely + // to get updated and consistent data. + lock_wait('system_theme_data'); + } // Scan the installation theme .info files and their engines. $themes = _system_theme_data(); + foreach ($themes as $key => $theme) { + if (!isset($theme->owner)) { + $themes[$key]->owner = ''; + } + } // Extract current files from database. system_get_files_database($themes, 'theme'); - db_query("DELETE FROM {system} WHERE type = 'theme'"); - - foreach ($themes as $theme) { - if (!isset($theme->owner)) { - $theme->owner = ''; + // If lock not acquired, return $themes data without writing to database. + if ($write_database) { + $names = array(); + + foreach ($themes as $theme) { + // Record the name of each theme found in the file system. + $names[] = $theme->name; + // Update the contents of the system table. + if (isset($theme->status) && MAINTENANCE_MODE != 'install') { + db_query("UPDATE {system} SET owner = '%s', info = '%s', filename = '%s' WHERE name = '%s' AND type = '%s'", $theme->owner, serialize($theme->info), $theme->filename, $theme->name, 'theme'); + } + else { + $theme->status = ($theme->name == variable_get('theme_default', 'garland')); + // This is a new theme. + db_query("INSERT INTO {system} (name, owner, info, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', '%s', %d, %d, %d)", $theme->name, $theme->owner, serialize($theme->info), 'theme', $theme->filename, $theme->status, 0, 0); + } } - - db_query("INSERT INTO {system} (name, owner, info, type, filename, status, throttle, bootstrap) VALUES ('%s', '%s', '%s', '%s', '%s', %d, %d, %d)", $theme->name, $theme->owner, serialize($theme->info), 'theme', $theme->filename, isset($theme->status) ? $theme->status : 0, 0, 0); + // Delete from the system table any themes missing from the file system. + if ($names) { + db_query("DELETE FROM {system} WHERE type = 'theme' AND name NOT IN (". db_placeholders($names, 'varchar') .")", $names); + } + lock_release('system_theme_data'); } - return $themes; }