self.fail(f"unexpected output: {out!a}")
refs = int(match.group(1))
blocks = int(match.group(2))
+ self.assertEqual(refs, 0, out)
if not MS_WINDOWS:
- # bpo-46417: Tolerate negative reference count which can occur because
- # of bugs in C extensions. It is only wrong if it's greater than 0.
- self.assertLessEqual(refs, 0, out)
self.assertEqual(blocks, 0, out)
else:
- # bpo-46857: on Windows, Python still leaks 1 reference and 1
- # memory block at exit.
- self.assertLessEqual(refs, 1, out)
+ # bpo-46857: on Windows, Python still leaks 1 memory block at exit
self.assertIn(blocks, (0, 1), out)
/* Compatibility aliases */
-PyObject *PyExc_EnvironmentError = NULL;
-PyObject *PyExc_IOError = NULL;
+PyObject *PyExc_EnvironmentError = NULL; // borrowed ref
+PyObject *PyExc_IOError = NULL; // borrowed ref
#ifdef MS_WINDOWS
-PyObject *PyExc_WindowsError = NULL;
+PyObject *PyExc_WindowsError = NULL; // borrowed ref
#endif
#define INIT_ALIAS(NAME, TYPE) \
do { \
- Py_INCREF(PyExc_ ## TYPE); \
- Py_XDECREF(PyExc_ ## NAME); \
PyExc_ ## NAME = PyExc_ ## TYPE; \
- if (PyDict_SetItemString(mod_dict, # NAME, PyExc_ ## NAME)) { \
+ if (PyDict_SetItemString(mod_dict, # NAME, PyExc_ ## TYPE)) { \
return -1; \
} \
} while (0)