aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Modules/_sqlite/module.c
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2021-04-14 16:50:16 +0200
committerGitHub <noreply@github.com>2021-04-14 17:50:16 +0300
commitdef919342facf7f53a3a5f0e9f4b1889d323956d (patch)
tree463d8f4fa9a33741624baab16cc85b985283447d /Modules/_sqlite/module.c
parentd9ba9dee7f267a603394b8d63a7697b08efdf1cb (diff)
downloadcpython-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.c25
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;
}