From 16afa5ac2691cb36d5c8a7c7f526a006bda988ce Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Mon, 28 Jul 2014 22:08:10 +0200 Subject: [PATCH] Remove duplicate call to BufferHandler::close, fixes #386 --- src/Monolog/Handler/BufferHandler.php | 7 +++++++ tests/Monolog/Handler/BufferHandlerTest.php | 17 +++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Monolog/Handler/BufferHandler.php b/src/Monolog/Handler/BufferHandler.php index 1085d0a7..6d8136f7 100644 --- a/src/Monolog/Handler/BufferHandler.php +++ b/src/Monolog/Handler/BufferHandler.php @@ -91,6 +91,13 @@ class BufferHandler extends AbstractHandler $this->clear(); } + public function __destruct() + { + // suppress the parent behavior since we already have register_shutdown_function() + // to call close(), and the reference contained there will prevent this from being + // GC'd until the end of the request + } + /** * {@inheritdoc} */ diff --git a/tests/Monolog/Handler/BufferHandlerTest.php b/tests/Monolog/Handler/BufferHandlerTest.php index beb08cf8..da8b3c39 100644 --- a/tests/Monolog/Handler/BufferHandlerTest.php +++ b/tests/Monolog/Handler/BufferHandlerTest.php @@ -16,6 +16,8 @@ use Monolog\Logger; class BufferHandlerTest extends TestCase { + private $shutdownCheckHandler; + /** * @covers Monolog\Handler\BufferHandler::__construct * @covers Monolog\Handler\BufferHandler::handle @@ -38,15 +40,22 @@ class BufferHandlerTest extends TestCase * @covers Monolog\Handler\BufferHandler::close * @covers Monolog\Handler\BufferHandler::flush */ - public function testDestructPropagatesRecords() + public function testPropagatesRecordsAtEndOfRequest() { $test = new TestHandler(); $handler = new BufferHandler($test); $handler->handle($this->getRecord(Logger::WARNING)); $handler->handle($this->getRecord(Logger::DEBUG)); - $handler->__destruct(); - $this->assertTrue($test->hasWarningRecords()); - $this->assertTrue($test->hasDebugRecords()); + $this->shutdownCheckHandler = $test; + register_shutdown_function(array($this, 'checkPropagation')); + } + + public function checkPropagation() + { + if (!$this->shutdownCheckHandler->hasWarningRecords() || !$this->shutdownCheckHandler->hasDebugRecords()) { + echo '!!! BufferHandlerTest::testPropagatesRecordsAtEndOfRequest failed to verify that the messages have been propagated' . PHP_EOL; + exit(1); + } } /**