Unverified Commit 3abadbb2 by Victor M. Alvarez Committed by GitHub

Fix segfault in Python 3.12b4 (#238)

In `flo_read` and `flo_write` there were calls to `Py_DECREF` after releasing the GIL.

Closes #237
parent 0030658c
...@@ -1394,29 +1394,28 @@ static size_t flo_read( ...@@ -1394,29 +1394,28 @@ static size_t flo_read(
PyObject* bytes = PyObject_CallMethod( PyObject* bytes = PyObject_CallMethod(
(PyObject*) user_data, "read", "n", (Py_ssize_t) size); (PyObject*) user_data, "read", "n", (Py_ssize_t) size);
PyGILState_Release(gil_state); if (bytes == NULL)
if (bytes != NULL)
{ {
Py_ssize_t len; PyGILState_Release(gil_state);
char* buffer; return i;
}
int result = PyBytes_AsStringAndSize(bytes, &buffer, &len);
if (result == -1 || (size_t) len < size) Py_ssize_t len;
{ char* buffer;
Py_DECREF(bytes);
return i;
}
memcpy((char*) ptr + i * size, buffer, size); int result = PyBytes_AsStringAndSize(bytes, &buffer, &len);
Py_DECREF(bytes); if (result == -1 || (size_t) len < size)
}
else
{ {
Py_DECREF(bytes);
PyGILState_Release(gil_state);
return i; return i;
} }
memcpy((char*) ptr + i * size, buffer, size);
Py_DECREF(bytes);
PyGILState_Release(gil_state);
} }
return count; return count;
...@@ -1444,12 +1443,11 @@ static size_t flo_write( ...@@ -1444,12 +1443,11 @@ static size_t flo_write(
(PyObject*) user_data, "write", "s#", (char*) ptr + i * size, size); (PyObject*) user_data, "write", "s#", (char*) ptr + i * size, size);
#endif #endif
Py_XDECREF(result);
PyGILState_Release(gil_state); PyGILState_Release(gil_state);
if (result == NULL) if (result == NULL)
return i; return i;
Py_DECREF(result);
} }
return count; return count;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment