From 8e75b3aba35d77b83f5bba2f7b8d69dc0efc1b14 Mon Sep 17 00:00:00 2001 From: Benoit Chesneau Date: Fri, 23 Jan 2026 10:59:56 +0100 Subject: [PATCH] fix: prevent RecursionError when pickling Config On Python 3.8+ with macOS, the multiprocessing module uses 'spawn' by default which pickles objects. When pickle.load tries to read __setstate__ before __dict__ is restored, it hits __getattr__ causing infinite recursion. Adding a special case for 'settings' prevents this. Closes #2401 --- gunicorn/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gunicorn/config.py b/gunicorn/config.py index 15b72bd1..a1e76796 100644 --- a/gunicorn/config.py +++ b/gunicorn/config.py @@ -62,6 +62,8 @@ class Config: return "\n".join(lines) def __getattr__(self, name): + if name == "settings": + raise AttributeError() if name not in self.settings: raise AttributeError("No configuration setting for: %s" % name) return self.settings[name].get()