bpo-30860: Fix a refleak. (#3506)

* Drop warnoptions from PyInterpreterState.

* Drop xoptions from PyInterpreterState.

* Don't set warnoptions and _xoptions again.

* Decref after adding to sys.__dict__.

* Drop an unused macro.

* Check sys.xoptions *before* we delete it.
diff --git a/Objects/object.c b/Objects/object.c
index 74893e3..ed8a62a 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -29,20 +29,23 @@
     return total;
 }
 
+PyObject *
+_PyDebug_XOptionShowRefCount(void)
+{
+    PyObject *xoptions = PySys_GetXOptions();
+    if (xoptions == NULL)
+        return NULL;
+
+    _Py_IDENTIFIER(showrefcount);
+    return _PyDict_GetItemId(xoptions, &PyId_showrefcount);
+}
+
 void
 _PyDebug_PrintTotalRefs(void) {
-    PyObject *xoptions, *value;
-    _Py_IDENTIFIER(showrefcount);
-
-    xoptions = PySys_GetXOptions();
-    if (xoptions == NULL)
-        return;
-    value = _PyDict_GetItemId(xoptions, &PyId_showrefcount);
-    if (value == Py_True)
-        fprintf(stderr,
-                "[%" PY_FORMAT_SIZE_T "d refs, "
-                "%" PY_FORMAT_SIZE_T "d blocks]\n",
-                _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
+    fprintf(stderr,
+            "[%" PY_FORMAT_SIZE_T "d refs, "
+            "%" PY_FORMAT_SIZE_T "d blocks]\n",
+            _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
 }
 #endif /* Py_REF_DEBUG */