Merge branch 'stable'

This commit is contained in:
Dylan K. Taylor 2020-12-27 19:35:27 +00:00
commit 5fa4e284bf
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
5 changed files with 26 additions and 31 deletions

View File

@ -25,7 +25,6 @@ namespace pocketmine\build\make_release;
use pocketmine\utils\VersionString; use pocketmine\utils\VersionString;
use pocketmine\VersionInfo; use pocketmine\VersionInfo;
use function defined;
use function dirname; use function dirname;
use function fgets; use function fgets;
use function file_get_contents; use function file_get_contents;
@ -86,6 +85,4 @@ function main(array $argv) : void{
system('git push origin HEAD ' . $currentVer->getBaseVersion()); system('git push origin HEAD ' . $currentVer->getBaseVersion());
} }
if(!defined('pocketmine\_PHPSTAN_ANALYSIS')){ main($argv);
main($argv);
}

View File

@ -26,7 +26,6 @@ namespace pocketmine\build\server_phar;
use pocketmine\utils\Git; use pocketmine\utils\Git;
use function array_map; use function array_map;
use function count; use function count;
use function defined;
use function dirname; use function dirname;
use function file_exists; use function file_exists;
use function getcwd; use function getcwd;
@ -175,6 +174,4 @@ STUB
} }
} }
if(!defined('pocketmine\_PHPSTAN_ANALYSIS')){ main();
main();
}

View File

@ -267,7 +267,5 @@ namespace pocketmine {
exit($exitCode); exit($exitCode);
} }
if(!defined('pocketmine\_PHPSTAN_ANALYSIS')){ \pocketmine\server();
\pocketmine\server();
}
} }

View File

@ -149,10 +149,7 @@ class RegionLoader{
} }
if($length > ($this->locationTable[$index]->getSectorCount() << 12)){ //Invalid chunk, bigger than defined number of sectors if($length > ($this->locationTable[$index]->getSectorCount() << 12)){ //Invalid chunk, bigger than defined number of sectors
\GlobalLogger::get()->error("Chunk x=$x,z=$z length mismatch (expected " . ($this->locationTable[$index]->getSectorCount() << 12) . " sectors, got $length sectors)"); throw new CorruptedChunkException("Chunk length mismatch (expected " . ($this->locationTable[$index]->getSectorCount() << 12) . " sectors, got $length sectors)");
$old = $this->locationTable[$index];
$this->locationTable[$index] = new RegionLocationTableEntry($old->getFirstSector(), $length >> 12, time());
$this->writeLocationIndex($index);
} }
$chunkData = fread($this->filePointer, $length); $chunkData = fread($this->filePointer, $length);
@ -175,6 +172,23 @@ class RegionLoader{
return $this->isChunkGenerated(self::getChunkOffset($x, $z)); return $this->isChunkGenerated(self::getChunkOffset($x, $z));
} }
private function disposeGarbageArea(RegionLocationTableEntry $oldLocation) : void{
/* release the area containing the old copy to the garbage pool */
$this->garbageTable->add($oldLocation);
$endGarbage = $this->garbageTable->end();
$nextSector = $this->nextSector;
for(; $endGarbage !== null and $endGarbage->getLastSector() + 1 === $nextSector; $endGarbage = $this->garbageTable->end()){
$nextSector = $endGarbage->getFirstSector();
$this->garbageTable->remove($endGarbage);
}
if($nextSector !== $this->nextSector){
$this->nextSector = $nextSector;
ftruncate($this->filePointer, $this->nextSector << 12);
}
}
/** /**
* @throws ChunkException * @throws ChunkException
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
@ -218,20 +232,7 @@ class RegionLoader{
$this->writeLocationIndex($index); $this->writeLocationIndex($index);
if($oldLocation !== null){ if($oldLocation !== null){
/* release the area containing the old copy to the garbage pool */ $this->disposeGarbageArea($oldLocation);
$this->garbageTable->add($oldLocation);
$endGarbage = $this->garbageTable->end();
$nextSector = $this->nextSector;
for(; $endGarbage !== null and $endGarbage->getLastSector() + 1 === $nextSector; $endGarbage = $this->garbageTable->end()){
$nextSector = $endGarbage->getFirstSector();
$this->garbageTable->remove($endGarbage);
}
if($nextSector !== $this->nextSector){
$this->nextSector = $nextSector;
ftruncate($this->filePointer, $this->nextSector << 12);
}
} }
} }
@ -240,8 +241,12 @@ class RegionLoader{
*/ */
public function removeChunk(int $x, int $z) : void{ public function removeChunk(int $x, int $z) : void{
$index = self::getChunkOffset($x, $z); $index = self::getChunkOffset($x, $z);
$oldLocation = $this->locationTable[$index];
$this->locationTable[$index] = null; $this->locationTable[$index] = null;
$this->writeLocationIndex($index); $this->writeLocationIndex($index);
if($oldLocation !== null){
$this->disposeGarbageArea($oldLocation);
}
} }
/** /**

View File

@ -21,8 +21,6 @@
declare(strict_types=1); declare(strict_types=1);
define('pocketmine\_PHPSTAN_ANALYSIS', true);
if(!defined('LEVELDB_ZLIB_RAW_COMPRESSION')){ if(!defined('LEVELDB_ZLIB_RAW_COMPRESSION')){
//leveldb might not be loaded //leveldb might not be loaded
define('LEVELDB_ZLIB_RAW_COMPRESSION', 4); define('LEVELDB_ZLIB_RAW_COMPRESSION', 4);