summaryrefslogtreecommitdiffstats
path: root/Modules/_sqlite/cursor.c
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2021-06-03 16:38:09 (GMT)
committerGitHub <noreply@github.com>2021-06-03 16:38:09 (GMT)
commit84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6 (patch)
tree1874fc537dde6821c40fdfafe54dd0b6a59e84e7 /Modules/_sqlite/cursor.c
parent41317801a95c758c3fc04c4fb332ac453c9e3ad3 (diff)
downloadcpython-84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6.zip
cpython-84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6.tar.gz
cpython-84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6.tar.bz2
[3.10] bpo-42972: Track sqlite3 statement objects (GH-26475) (GH-26515)
Allocate and track statement objects in pysqlite_statement_create. By allocating and tracking creation of statement object in pysqlite_statement_create(), the caller does not need to worry about GC syncronization, and eliminates the possibility of getting a badly created object. All related fault handling is moved to pysqlite_statement_create(). Co-authored-by: Victor Stinner <vstinner@python.org>. (cherry picked from commit fffa0f92adaaed0bcb3907d982506f78925e9052) Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
Diffstat (limited to 'Modules/_sqlite/cursor.c')
-rw-r--r--Modules/_sqlite/cursor.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index 558b43a..0335e98 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -507,13 +507,8 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation
if (self->statement->in_use) {
Py_SETREF(self->statement,
- PyObject_GC_New(pysqlite_Statement, pysqlite_StatementType));
- if (!self->statement) {
- goto error;
- }
- rc = pysqlite_statement_create(self->statement, self->connection, operation);
- if (rc != SQLITE_OK) {
- Py_CLEAR(self->statement);
+ pysqlite_statement_create(self->connection, operation));
+ if (self->statement == NULL) {
goto error;
}
}