Index: modules/aggregator/aggregator.module =================================================================== RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.module,v retrieving revision 1.405 diff -u -p -r1.405 aggregator.module --- modules/aggregator/aggregator.module 1 Mar 2009 07:21:02 -0000 1.405 +++ modules/aggregator/aggregator.module 18 Mar 2009 14:36:27 -0000 @@ -287,10 +287,21 @@ function aggregator_perm() { * Checks news feeds for updates once their refresh interval has elapsed. */ function aggregator_cron() { - $result = db_query('SELECT * FROM {aggregator_feed} WHERE checked + refresh < :time', array(':time' => REQUEST_TIME)); - foreach ($result as $feed) { - aggregator_refresh($feed); - } + // There is no UI for this variable. It's for advanced use-cases. + $cron_percentage = variable_get('aggregator_cron_percentage', 50); + $cron_time_limit = ($cron_percentage / 100) * ini_get('max_execution_time'); + timer_start('aggregator_cron'); + do { + $processed_feeds = FALSE; + $result = db_query_range('SELECT * FROM {aggregator_feed} WHERE checked + refresh < :time', array(':time' => REQUEST_TIME), 0, 100); + foreach ($result as $feed) { + if ((timer_read('aggregator_cron') / 1000) > $cron_time_limit) { + break; + } + $processed_feeds = TRUE; + aggregator_refresh($feed); + } + } while ($processed_feeds === TRUE); } /**