From 3ff32c50d143d8a498f9a5dfef1a31b16a7456fe Mon Sep 17 00:00:00 2001 From: Ken Nzioka Date: Wed, 22 Oct 2025 10:48:23 +0300 Subject: Fixed #36674 -- Fixed memory leak in select_related(). --- tests/select_related/tests.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'tests') diff --git a/tests/select_related/tests.py b/tests/select_related/tests.py index 41ed350cf3..59d1270aa0 100644 --- a/tests/select_related/tests.py +++ b/tests/select_related/tests.py @@ -1,6 +1,9 @@ +import gc + from django.core.exceptions import FieldError from django.db.models import FETCH_PEERS from django.test import SimpleTestCase, TestCase +from django.test.utils import garbage_collect from .models import ( Bookmark, @@ -57,6 +60,17 @@ class SelectRelatedTests(TestCase): "Amanita muscaria" ) + def setup_gc_debug(self): + self.addCleanup(gc.set_debug, 0) + self.addCleanup(gc.enable) + gc.disable() + garbage_collect() + gc.set_debug(gc.DEBUG_SAVEALL) + + def assert_no_memory_leaks(self): + garbage_collect() + self.assertEqual(gc.garbage, []) + def test_access_fks_without_select_related(self): """ Normally, accessing FKs doesn't fill in related objects @@ -128,6 +142,11 @@ class SelectRelatedTests(TestCase): ) self.assertEqual(s.id + 10, s.a) + def test_select_related_memory_leak(self): + self.setup_gc_debug() + list(Species.objects.select_related("genus")) + self.assert_no_memory_leaks() + def test_certain_fields(self): """ The optional fields passed to select_related() control which related -- cgit v1.3