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
The sqlite3 Connection object creates a list to hold weakrefs to Cursors, and each cursor registers itself in that list when it's created.
cpython/Modules/_sqlite/connection.c
Lines 289 to 293 in b625601
cpython/Modules/_sqlite/cursor.c
Lines 108 to 122 in b625601
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