{
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
- ? _PyXIData_Release(xidata)
- : _PyXIData_ReleaseAndRawFree(xidata);
+ ? _PyXIData_ReleaseAndRawFree(xidata)
+ : _PyXIData_Release(xidata);
if (res < 0) {
/* The owning interpreter is already destroyed. */
_PyXIData_Clear(NULL, xidata);
int
_PyXI_InitFailure(_PyXI_failure *failure, _PyXI_errcode code, PyObject *obj)
{
+ *failure = (_PyXI_failure){
+ .code = code,
+ .msg = NULL,
+ .msg_owned = 0,
+ };
+ if (obj == NULL) {
+ return 0;
+ }
+
PyObject *msgobj = PyObject_Str(obj);
if (msgobj == NULL) {
return -1;
// That happens automatically in _capture_current_exception().
const char *msg = _copy_string_obj_raw(msgobj, NULL);
Py_DECREF(msgobj);
- if (PyErr_Occurred()) {
+ if (msg == NULL) {
return -1;
}
*failure = (_PyXI_failure){