Skip to content

sqlite3 Connection maintains an unused list of weakrefs to Cursor objects #144377

@takluyver

Description

@takluyver

The sqlite3 Connection object creates a list to hold weakrefs to Cursors, and each cursor registers itself in that list when it's created.

PyObject *cursors = PyList_New(0);
if (cursors == NULL) {
Py_DECREF(statement_cache);
goto error;
}

register_cursor(pysqlite_Connection *connection, PyObject *cursor)
{
PyObject *weakref = PyWeakref_NewRef((PyObject *)cursor, NULL);
if (weakref == NULL) {
return 0;
}
if (PyList_Append(connection->cursors, weakref) < 0) {
Py_CLEAR(weakref);
return 0;
}
Py_DECREF(weakref);
return 1;
}

There's code to periodically clear out dead weakrefs from the list, but nothing I can see that actually uses it. It looks like the use was removed in #26026.

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions