mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Fixed #36674 -- Fixed memory leak in select_related().
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user