diff --git a/framework/yii/base/Application.php b/framework/yii/base/Application.php index 4d431b3..845c564 100644 --- a/framework/yii/base/Application.php +++ b/framework/yii/base/Application.php @@ -54,6 +54,13 @@ abstract class Application extends Module * If this is false, layout will be disabled. */ public $layout = 'main'; + /** + * @var integer the size of the reserved memory. A portion of memory is pre-allocated so that + * when an out-of-memory issue occurs, the error handler is able to handle the error with + * the help of this reserved memory. If you set this value to be 0, no memory will be reserved. + * Defaults to 256KB. + */ + public $reservedMemorySize = 262144; /** * @var string Used to reserve memory for fatal error handler. @@ -125,9 +132,9 @@ abstract class Application extends Module ini_set('display_errors', 0); set_exception_handler(array($this, 'handleException')); set_error_handler(array($this, 'handleError'), error_reporting()); - // Allocating twice more than required to display memory exhausted error - // in case of trying to allocate last 1 byte while all memory is taken. 1024 * 256 bytes - $this->_memoryReserve = str_repeat('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 1024); + if ($this->reservedMemorySize > 0) { + $this->_memoryReserve = str_repeat('x', $this->reservedMemorySize); + } register_shutdown_function(array($this, 'handleFatalError')); } }