Better fork management
This commit is contained in:
parent
ef0059bf08
commit
6887837b31
@ -123,11 +123,15 @@ class API extends APIFactory
|
|||||||
public function __set($name, $value)
|
public function __set($name, $value)
|
||||||
{
|
{
|
||||||
if ($name === 'settings') {
|
if ($name === 'settings') {
|
||||||
if (Logger::is_fork()) {
|
if (Logger::is_fork() && !Logger::$processed_fork) {
|
||||||
\danog\MadelineProto\Logger::log('Detected fork');
|
\danog\MadelineProto\Logger::log('Detected fork');
|
||||||
$this->API->__wakeup();
|
$this->API->reset_session();
|
||||||
|
foreach ($this->API->datacenter->sockets as $datacenter) {
|
||||||
|
$datacenter->close_and_reopen();
|
||||||
|
}
|
||||||
|
Logger::$processed_fork = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->API->__construct($value);
|
return $this->API->__construct($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +109,6 @@ class APIFactory
|
|||||||
public $namespace = '';
|
public $namespace = '';
|
||||||
public $API;
|
public $API;
|
||||||
public $lua = false;
|
public $lua = false;
|
||||||
public $pid;
|
|
||||||
|
|
||||||
public function __construct($namespace, $API)
|
public function __construct($namespace, $API)
|
||||||
{
|
{
|
||||||
@ -119,12 +118,13 @@ class APIFactory
|
|||||||
|
|
||||||
public function __call($name, $arguments)
|
public function __call($name, $arguments)
|
||||||
{
|
{
|
||||||
if (Logger::is_fork()) {
|
if (Logger::is_fork() && !Logger::$processed_fork) {
|
||||||
\danog\MadelineProto\Logger::log('Detected fork');
|
\danog\MadelineProto\Logger::log('Detected fork');
|
||||||
$this->API->reset_session();
|
$this->API->reset_session();
|
||||||
foreach ($this->API->datacenter->sockets as $datacenter) {
|
foreach ($this->API->datacenter->sockets as $datacenter) {
|
||||||
$datacenter->close_and_reopen();
|
$datacenter->close_and_reopen();
|
||||||
}
|
}
|
||||||
|
Logger::$processed_fork = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->API->setdem) {
|
if ($this->API->setdem) {
|
||||||
|
@ -32,6 +32,9 @@ class Logger
|
|||||||
public static $bigint = true;
|
public static $bigint = true;
|
||||||
public static $colors = [];
|
public static $colors = [];
|
||||||
public static $isatty = false;
|
public static $isatty = false;
|
||||||
|
public static $is_fork = false;
|
||||||
|
public static $can_getmypid = true;
|
||||||
|
public static $processed_fork = false;
|
||||||
private static $pid;
|
private static $pid;
|
||||||
|
|
||||||
const ULTRA_VERBOSE = 5;
|
const ULTRA_VERBOSE = 5;
|
||||||
@ -70,14 +73,20 @@ class Logger
|
|||||||
|
|
||||||
public static function is_fork()
|
public static function is_fork()
|
||||||
{
|
{
|
||||||
|
if (self::$is_fork) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!self::$can_getmypid) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
if (self::$pid === null) {
|
if (self::$pid === null) {
|
||||||
self::$pid = getmypid();
|
self::$pid = getmypid();
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$pid !== getmypid();
|
return self::$is_fork = self::$pid !== getmypid();
|
||||||
} catch (\danog\MadelineProto\Exception $e) {
|
} catch (\danog\MadelineProto\Exception $e) {
|
||||||
return false;
|
return self::$can_getmypid = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user