From 83349d7011a706f3919d1f1b81f19042e277fb9d Mon Sep 17 00:00:00 2001 From: Chris NeJame Date: Thu, 23 Jan 2020 14:50:21 -0500 Subject: [PATCH] avoid exponential recursion by checking if already added --- src/_pytest/fixtures.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index df2b58e7623..5e4fc89a8cf 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -889,7 +889,15 @@ def execute(self, request): for argname in self._dependee_fixture_argnames(request): fixturedef = request._get_active_fixturedef(argname) if argname != "request": - fixturedef.addfinalizer(functools.partial(self.finish, request=request)) + for fin in fixturedef._finalizers: + if "request" in getattr(fin, "keywords", {}): + if self == fin.keywords["request"]._fixturedef: + break + else: + fixturedef.addfinalizer( + functools.partial(self.finish, request=request) + ) + my_cache_key = self.cache_key(request) cached_result = getattr(self, "cached_result", None)