diff options
author | Erlend Egeberg Aasland <erlend.aasland@innova.no> | 2021-04-14 16:50:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-14 17:50:16 +0300 |
commit | def919342facf7f53a3a5f0e9f4b1889d323956d (patch) | |
tree | 463d8f4fa9a33741624baab16cc85b985283447d /Modules/_sqlite/module.c | |
parent | d9ba9dee7f267a603394b8d63a7697b08efdf1cb (diff) | |
download | cpython-def919342facf7f53a3a5f0e9f4b1889d323956d.tar.gz cpython-def919342facf7f53a3a5f0e9f4b1889d323956d.zip |
bpo-43505: Explicitly initialize and shutdown sqlite3 (GH-25404)
Diffstat (limited to 'Modules/_sqlite/module.c')
-rw-r--r-- | Modules/_sqlite/module.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 6bfb1b73f82..8dbfa7b38a1 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -343,8 +343,7 @@ static struct PyModuleDef _sqlite3module = { #define ADD_TYPE(module, type) \ do { \ if (PyModule_AddType(module, &type) < 0) { \ - Py_DECREF(module); \ - return NULL; \ + goto error; \ } \ } while (0) @@ -370,6 +369,12 @@ PyMODINIT_FUNC PyInit__sqlite3(void) return NULL; } + int rc = sqlite3_initialize(); + if (rc != SQLITE_OK) { + PyErr_SetString(PyExc_ImportError, sqlite3_errstr(rc)); + return NULL; + } + module = PyModule_Create(&_sqlite3module); if (!module || @@ -380,8 +385,7 @@ PyMODINIT_FUNC PyInit__sqlite3(void) (pysqlite_statement_setup_types(module) < 0) || (pysqlite_prepare_protocol_setup_types(module) < 0) ) { - Py_XDECREF(module); - return NULL; + goto error; } ADD_TYPE(module, *pysqlite_ConnectionType); @@ -428,12 +432,11 @@ PyMODINIT_FUNC PyInit__sqlite3(void) goto error; } -error: - if (PyErr_Occurred()) - { - PyErr_SetString(PyExc_ImportError, MODULE_NAME ": init failed"); - Py_DECREF(module); - module = NULL; - } return module; + +error: + sqlite3_shutdown(); + PyErr_SetString(PyExc_ImportError, MODULE_NAME ": init failed"); + Py_XDECREF(module); + return NULL; } |