mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
bpo-42213: Remove redundant cyclic GC hack in sqlite3 (GH-26517)
The sqlite3 module now fully implements the GC protocol, so there's no need for this workaround anymore. - Add and use managed resource helper for connections using TESTFN - Sort test imports - Split open-tests into their own test case Automerge-Triggered-By: GH:vstinner
This commit is contained in:
parent
2c1e2583fd
commit
d88b47b5a3
5 changed files with 37 additions and 39 deletions
|
@ -97,9 +97,6 @@ pysqlite_cache_init(pysqlite_Cache *self, PyObject *args, PyObject *kwargs)
|
|||
}
|
||||
|
||||
self->factory = Py_NewRef(factory);
|
||||
|
||||
self->decref_factory = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -108,9 +105,7 @@ cache_traverse(pysqlite_Cache *self, visitproc visit, void *arg)
|
|||
{
|
||||
Py_VISIT(Py_TYPE(self));
|
||||
Py_VISIT(self->mapping);
|
||||
if (self->decref_factory) {
|
||||
Py_VISIT(self->factory);
|
||||
}
|
||||
Py_VISIT(self->factory);
|
||||
|
||||
pysqlite_Node *node = self->first;
|
||||
while (node) {
|
||||
|
@ -124,9 +119,7 @@ static int
|
|||
cache_clear(pysqlite_Cache *self)
|
||||
{
|
||||
Py_CLEAR(self->mapping);
|
||||
if (self->decref_factory) {
|
||||
Py_CLEAR(self->factory);
|
||||
}
|
||||
Py_CLEAR(self->factory);
|
||||
|
||||
/* iterate over all nodes and deallocate them */
|
||||
pysqlite_Node *node = self->first;
|
||||
|
|
|
@ -52,10 +52,6 @@ typedef struct
|
|||
|
||||
pysqlite_Node* first;
|
||||
pysqlite_Node* last;
|
||||
|
||||
/* if set, decrement the factory function when the Cache is deallocated.
|
||||
* this is almost always desirable, but not in the pysqlite context */
|
||||
int decref_factory;
|
||||
} pysqlite_Cache;
|
||||
|
||||
extern PyTypeObject *pysqlite_NodeType;
|
||||
|
|
|
@ -149,14 +149,6 @@ pysqlite_connection_init(pysqlite_Connection *self, PyObject *args,
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* By default, the Cache class INCREFs the factory in its initializer, and
|
||||
* decrefs it in its deallocator method. Since this would create a circular
|
||||
* reference here, we're breaking it by decrementing self, and telling the
|
||||
* cache class to not decref the factory (self) in its deallocator.
|
||||
*/
|
||||
self->statement_cache->decref_factory = 0;
|
||||
Py_DECREF(self);
|
||||
|
||||
self->detect_types = detect_types;
|
||||
self->timeout = timeout;
|
||||
(void)sqlite3_busy_timeout(self->db, (int)(timeout*1000));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue