--- /dev/null
+Fix memory leaks in cross-interpreter channel operations and shared
+namespace handling.
{
if (item->data != NULL) {
// It was allocated in channel_send().
- (void)_release_xid_data(item->data, XID_IGNORE_EXC & XID_FREE);
+ (void)_release_xid_data(item->data, XID_IGNORE_EXC | XID_FREE);
item->data = NULL;
}
return;
}
// It was allocated in queue_put().
- (void)_release_xid_data(item->data, XID_IGNORE_EXC & XID_FREE);
+ (void)_release_xid_data(item->data, XID_IGNORE_EXC | XID_FREE);
item->data = NULL;
}
{
PyObject *exc = PyErr_GetRaisedException();
int res = rawfree
- ? _PyCrossInterpreterData_Release(data)
- : _PyCrossInterpreterData_ReleaseAndRawFree(data);
+ ? _PyCrossInterpreterData_ReleaseAndRawFree(data)
+ : _PyCrossInterpreterData_Release(data);
if (res < 0) {
/* The owning interpreter is already destroyed. */
_PyCrossInterpreterData_Clear(NULL, data);