From fb1d5e4340d84088623afb4ccebc64f6a3a70bb8 Mon Sep 17 00:00:00 2001 From: Simon Quigley Date: Mon, 27 Jan 2025 12:58:31 -0600 Subject: [PATCH] Add another try/catch --- cpp/db_common.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/cpp/db_common.cpp b/cpp/db_common.cpp index 2d5d7a6..d50d1d5 100644 --- a/cpp/db_common.cpp +++ b/cpp/db_common.cpp @@ -46,23 +46,28 @@ QSqlDatabase get_thread_connection() { // Check if the connection already exists for this thread attempt++; - if (QSqlDatabase::contains(connection_name)) { - QSqlDatabase db = QSqlDatabase::database(connection_name); - if (!db.isOpen()) { - if (!db.open()) { - std::string last_error_text = db.lastError().text().toStdString(); - if (last_error_text.contains("unable to open database file")) { - std::this_thread::sleep_for(std::chrono::milliseconds(get_delay(attempt))); - continue; + try { + if (QSqlDatabase::contains(connection_name)) { + QSqlDatabase db = QSqlDatabase::database(connection_name); + if (!db.isOpen()) { + if (!db.open()) { + std::string last_error_text = db.lastError().text().toStdString(); + if (last_error_text.contains("unable to open database file")) { + std::this_thread::sleep_for(std::chrono::milliseconds(get_delay(attempt))); + continue; + } + throw std::runtime_error(std::format("Failed to open thread-specific database connection: {}", last_error_text)); } - throw std::runtime_error(std::format("Failed to open thread-specific database connection: {}", last_error_text)); } + return db; } - return db; - } - thread_db = QSqlDatabase::addDatabase("QSQLITE", connection_name); - thread_db.setDatabaseName(shared_database_path); + thread_db = QSqlDatabase::addDatabase("QSQLITE", connection_name); + thread_db.setDatabaseName(shared_database_path); + } catch (...) { + std::this_thread::sleep_for(std::chrono::milliseconds(get_delay(attempt))); + continue; + } if (!thread_db.open()) throw std::runtime_error("Failed to open new database connection for thread: " + thread_db.lastError().text().toStdString()); passed = true;