public function crashDump()
{
if ($this->isRunning === false) {
return;
}
if ($this->sendUsageTicker > 0) {
$this->sendUsage(SendUsageTask::TYPE_CLOSE);
}
$this->hasStopped = false;
ini_set("error_reporting", 0);
ini_set("memory_limit", -1);
//Fix error dump not dumped on memory problems
$this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.create"));
try {
$dump = new CrashDump($this);
} catch (\Throwable $e) {
$this->logger->critical($this->getLanguage()->translateString("pocketmine.crash.error", $e->getMessage()));
return;
}
$this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.submit", [$dump->getPath()]));
if ($this->getProperty("auto-report.enabled", true) !== false) {
$report = true;
$plugin = $dump->getData()["plugin"];
if (is_string($plugin)) {
$p = $this->pluginManager->getPlugin($plugin);
if ($p instanceof Plugin and !$p->getPluginLoader() instanceof PharPluginLoader) {
$report = false;
}
} elseif (\Phar::running(true) == "") {
$report = false;
}
if ($dump->getData()["error"]["type"] === "E_PARSE" or $dump->getData()["error"]["type"] === "E_COMPILE_ERROR") {
$report = false;
}
if ($report) {
$reply = Utils::postURL("http://" . $this->getProperty("auto-report.host", "crash.pocketmine.net") . "/submit/api", ["report" => "yes", "name" => $this->getName() . " " . $this->getPocketMineVersion(), "email" => "[email protected]", "reportPaste" => base64_encode($dump->getEncodedData())]);
if (($data = json_decode($reply)) !== false and isset($data->crashId)) {
$reportId = $data->crashId;
$reportUrl = $data->crashUrl;
$this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.archive", [$reportUrl, $reportId]));
}
}
}
//$this->checkMemory();
//$dump .= "Memory Usage Tracking: \r\n" . chunk_split(base64_encode(gzdeflate(implode(";", $this->memoryStats), 9))) . "\r\n";
$this->forceShutdown();
$this->isRunning = false;
@kill(getmypid());
exit(1);
}