From: Elijah Martin-Merrill Date: Mon, 27 Jul 2020 14:52:44 +0000 (-0400) Subject: fix memory leak caused by not destroying image in Preview/Generate.php X-Git-Tag: v20.0.0beta1~127^2~1 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=56ed563b0c02834c1b3fffb839da25a2918ec7e8;p=nextcloud-server.git fix memory leak caused by not destroying image in Preview/Generate.php Signed-off-by: Elijah Martin-Merrill --- diff --git a/lib/private/Preview/Generator.php b/lib/private/Preview/Generator.php index f7aed987d89..45e991d551d 100644 --- a/lib/private/Preview/Generator.php +++ b/lib/private/Preview/Generator.php @@ -192,6 +192,12 @@ class Generator { } } + // Free memory being used by the embedded image resource. Without this the image is kept in memory indefinitely. + // Garbage Collection does NOT free this memory. We have to do it ourselves. + if ($maxPreviewImage instanceof IImage) { + $maxPreviewImage->destroy(); + } + return $preview; } diff --git a/tests/lib/Preview/GeneratorTest.php b/tests/lib/Preview/GeneratorTest.php index 3a46447632d..5e9b9bcbb8d 100644 --- a/tests/lib/Preview/GeneratorTest.php +++ b/tests/lib/Preview/GeneratorTest.php @@ -31,7 +31,6 @@ use OCP\Files\NotFoundException; use OCP\Files\SimpleFS\ISimpleFile; use OCP\Files\SimpleFS\ISimpleFolder; use OCP\IConfig; -use OCP\IImage; use OCP\IPreview; use OCP\Preview\IProviderV2; use Symfony\Component\EventDispatcher\EventDispatcherInterface; @@ -183,7 +182,7 @@ class GeneratorTest extends \Test\TestCase { $this->fail('Unexpected provider requested'); }); - $image = $this->createMock(IImage::class); + $image = $this->createMock(\OC_Image::class); $image->method('width')->willReturn(2048); $image->method('height')->willReturn(2048); $image->method('valid')->willReturn(true); @@ -318,7 +317,7 @@ class GeneratorTest extends \Test\TestCase { } private function getMockImage($width, $height, $data = null) { - $image = $this->createMock(IImage::class); + $image = $this->createMock(\OC_Image::class); $image->method('height')->willReturn($width); $image->method('width')->willReturn($height); $image->method('valid')->willReturn(true);