From a7ade9d68f41bf6b01cc6121635c87b4420a5b46 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sun, 10 Apr 2016 13:01:10 +0100 Subject: [PATCH] Only close handles that have been opened by the StreamHandler, fixes #764 --- src/Monolog/Handler/StreamHandler.php | 2 +- tests/Monolog/Handler/StreamHandlerTest.php | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Monolog/Handler/StreamHandler.php b/src/Monolog/Handler/StreamHandler.php index 32e8bfd6..65c11838 100644 --- a/src/Monolog/Handler/StreamHandler.php +++ b/src/Monolog/Handler/StreamHandler.php @@ -59,7 +59,7 @@ class StreamHandler extends AbstractProcessingHandler */ public function close() { - if (is_resource($this->stream)) { + if ($this->url && is_resource($this->stream)) { fclose($this->stream); } $this->stream = null; diff --git a/tests/Monolog/Handler/StreamHandlerTest.php b/tests/Monolog/Handler/StreamHandlerTest.php index b1e22fb6..487030fe 100644 --- a/tests/Monolog/Handler/StreamHandlerTest.php +++ b/tests/Monolog/Handler/StreamHandlerTest.php @@ -35,10 +35,26 @@ class StreamHandlerTest extends TestCase /** * @covers Monolog\Handler\StreamHandler::close */ - public function testClose() + public function testCloseKeepsExternalHandlersOpen() { $handle = fopen('php://memory', 'a+'); $handler = new StreamHandler($handle); + $this->assertTrue(is_resource($handle)); + $handler->close(); + $this->assertTrue(is_resource($handle)); + } + + /** + * @covers Monolog\Handler\StreamHandler::close + */ + public function testClose() + { + $handler = new StreamHandler('php://memory'); + $handler->handle($this->getRecord(Logger::WARNING, 'test')); + $streamProp = new \ReflectionProperty('Monolog\Handler\StreamHandler', 'stream'); + $streamProp->setAccessible(true); + $handle = $streamProp->getValue($handler); + $this->assertTrue(is_resource($handle)); $handler->close(); $this->assertFalse(is_resource($handle));