MDL-24962 backup - circular refs. cleaner in backup_controller

This commit is contained in:
Eloy Lafuente 2010-11-15 07:16:51 +00:00
parent 287e804058
commit ab1c069e11

View File

@ -139,6 +139,23 @@ class backup_controller extends backup implements loggable {
}
}
/**
* Clean structures used by the backup_controller
*
* This method clean various structures used by the backup_controller,
* destroying them in an ordered way, so their memory will be gc properly
* by PHP (mainly circular references).
*
* Note that, while it's not mandatory to execute this method, it's highly
* recommended to do so, specially in scripts performing multiple operations
* (like the automated backups) or the system will run out of memory after
* a few dozens of backups)
*/
public function destroy() {
// Only need to destroy circulars under the plan. Delegate to it.
$this->plan->destroy();
}
public function finish_ui() {
if ($this->status != backup::STATUS_SETTING_UI) {
throw new backup_controller_exception('cannot_finish_ui_if_not_setting_ui');
@ -161,7 +178,9 @@ class backup_controller extends backup implements loggable {
// containing all the steps will be sent to DB. 100% (monster) useless.
if ($status == backup::STATUS_AWAITING) {
$this->save_controller();
$this->logger = self::load_controller($this->backupid)->logger; // wakeup loggers
$tbc = self::load_controller($this->backupid);
$this->logger = $tbc->logger; // wakeup loggers
$tbc->destroy(); // Clean temp controller structures
}
}