Correct call of destruct chain to release PMF file locks at unload

This commit is contained in:
Shoghi Cervantes 2013-06-03 23:24:33 +02:00
parent f2927df2b3
commit be83eaf521
4 changed files with 18 additions and 2 deletions

View File

@ -139,6 +139,7 @@ class LevelAPI{
foreach($this->server->api->tile->getAll($level) as $tile){
$tile->close();
}
$level->close();
unset($this->levels[$name]);
return true;
}
@ -154,6 +155,9 @@ class LevelAPI{
console("[INFO] Preparing level \"".$name."\"");
$level = new PMFLevel($path."level.pmf");
$entities = new Config($path."entities.yml", CONFIG_YAML);
if(file_exists($path."tileEntities.yml")){
@rename($path."tileEntities.yml", $path."tiles.yml");
}
$tiles = new Config($path."tiles.yml", CONFIG_YAML);
$this->levels[$name] = new Level($level, $entities, $tiles, $name);
foreach($entities->getAll() as $entity){
@ -191,6 +195,7 @@ class LevelAPI{
}
$t = $this->server->api->tile->add($this->levels[$name], $tile["id"], $tile["x"], $tile["y"], $tile["z"], $tile);
}
return true;
}
public function handle($data, $event){

View File

@ -51,6 +51,12 @@ class PMFLevel extends PMF{
return true;
}
public function close(){
$chunks = null;
unset($chunks, $chunkChange, $locationTable);
parent::close();
}
public function __construct($file, $blank = false){
if(is_array($blank)){
$this->create($file, 0);

View File

@ -45,6 +45,10 @@ class Level{
$this->changedCount = array();
}
public function close(){
$this->__destruct();
}
public function useChunk($X, $Z, Player $player){
if(!isset($this->usedChunks[$X.".".$Z])){
$this->usedChunks[$X.".".$Z] = array();
@ -118,6 +122,7 @@ class Level{
public function __destruct(){
$this->save();
$this->level->close();
unset($this->level);
}

View File

@ -32,12 +32,12 @@ class LevelImport{
}
public function import(){
if(file_exists($this->path."tiles.dat")){ //OldPM
if(file_exists($this->path."tileEntities.dat")){ //OldPM
$level = unserialize(file_get_contents($this->path."level.dat"));
console("[INFO] Importing OldPM level \"".$level["LevelName"]."\" to PMF format");
$entities = new Config($this->path."entities.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."entities.dat")));
$entities->save();
$tiles = new Config($this->path."tiles.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."tiles.dat")));
$tiles = new Config($this->path."tiles.yml", CONFIG_YAML, unserialize(file_get_contents($this->path."tileEntities.dat")));
$tiles->save();
}elseif(file_exists($this->path."chunks.dat") and file_exists($this->path."level.dat")){ //Pocket
$nbt = new NBT();