From 2e37b5092548582d34d60a5c8f342ddcfbdab075 Mon Sep 17 00:00:00 2001 From: freyers Date: Fri, 15 May 2026 22:29:02 +0000 Subject: [PATCH] fix(tasklet): release the PyGreenlet_Switch return reference PyGreenlet_Switch returns a new reference to the switched-in value, but it was assigned straight into a bool, so the object was never released. This leaks a reference on every tasklet switch (the hottest path on the server) and grows unbounded over uptime. Capture the result, derive the success bool from it, and Py_XDECREF it. --- src/Tasklet.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Tasklet.cpp b/src/Tasklet.cpp index 2ef7b6c..d055d12 100644 --- a/src/Tasklet.cpp +++ b/src/Tasklet.cpp @@ -398,7 +398,9 @@ bool Tasklet::SwitchTo( ) m_firstRun = false; - ret = PyGreenlet_Switch( m_greenlet, args, kwargs ); + PyObject* switchResult = PyGreenlet_Switch( m_greenlet, args, kwargs ); + ret = ( switchResult != nullptr ); + Py_XDECREF( switchResult ); // Clear arguments SetArguments( nullptr );