Issue #25745: Fixed leaking a userptr in curses panel destructor.
diff --git a/Misc/NEWS b/Misc/NEWS
index f9bb8ef..d41910a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -116,6 +116,8 @@
 Library
 -------
 
+- Issue #25745: Fixed leaking a userptr in curses panel destructor.
+
 - Issue #26881: The modulefinder module now supports extended opcode arguments.
 
 - Issue #23815: Fixed crashes related to directly created instances of types in
diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c
index c77e614..228f497 100644
--- a/Modules/_curses_panel.c
+++ b/Modules/_curses_panel.c
@@ -220,6 +220,11 @@
 static void
 PyCursesPanel_Dealloc(PyCursesPanelObject *po)
 {
+    PyObject *obj = (PyObject *) panel_userptr(po->pan);
+    if (obj) {
+        (void)set_panel_userptr(po->pan, NULL);
+        Py_DECREF(obj);
+    }
     (void)del_panel(po->pan);
     if (po->wo != NULL) {
         Py_DECREF(po->wo);