From 04f8489cf3ed49475d22537270b839623d8ef370 Mon Sep 17 00:00:00 2001 From: marcelb Date: Wed, 9 Aug 2023 20:16:24 +0200 Subject: [PATCH] Mutex secure --- .vscode/settings.json | 3 ++- lib/mysql.hpp | 3 ++- src/mysql.cpp | 19 +++++++++++++++++-- test/test.cpp | 8 ++++---- test/test.o | Bin 92496 -> 93128 bytes 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8044b1c..e375c2a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,7 @@ "files.associations": { "string": "cpp", "vector": "cpp", - "deque": "cpp" + "deque": "cpp", + "ostream": "cpp" } } \ No newline at end of file diff --git a/lib/mysql.hpp b/lib/mysql.hpp index 26b2674..762007d 100644 --- a/lib/mysql.hpp +++ b/lib/mysql.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ using namespace mysql; class mySQL { public: - + mutex io; MySQL_Driver *drv; Connection *con; string path, username, password, db; diff --git a/src/mysql.cpp b/src/mysql.cpp index 01b1243..80f7da3 100644 --- a/src/mysql.cpp +++ b/src/mysql.cpp @@ -22,21 +22,24 @@ mySQL::mySQL(const string _path, const string _username, const string _password, } bool mySQL::open(const string _db) { + io.lock(); db = _db.empty() ? db : _db; bool status = true; try { con->setSchema(db); status = false; + io.unlock(); } catch (const SQLException &error) { cout << error.what() << endl; + io.unlock(); } - return status; } bool mySQL::connect() { + io.lock(); uint trys = 0; bool status = true; @@ -45,10 +48,12 @@ bool mySQL::connect() { drv = get_mysql_driver_instance(); con = drv->connect(path, username, password); status = false; + io.unlock(); } catch (const SQLException &error) { cout << error.what() << endl; usleep(10000*trys++); + io.unlock(); } } @@ -56,15 +61,18 @@ bool mySQL::connect() { } bool mySQL::close() { + io.lock(); bool status = true; if (con->isValid() && !con->isClosed()) { try { con->close(); status = false; + io.unlock(); } catch (const SQLException &error) { cout << error.what() << endl; + io.unlock(); } } @@ -83,6 +91,7 @@ map> mySQL::query(const string sql_command) { } } + io.lock(); /**/ map> maped; @@ -115,12 +124,15 @@ map> mySQL::query(const string sql_command) { delete res; delete stmt; + io.unlock(); } catch (const SQLException &error) { cout << error.what() << endl; + io.unlock(); } catch (const string error) { throw error; + io.unlock(); } /**/ @@ -146,6 +158,7 @@ bool mySQL::change(const string sql_command) { } } + io.lock(); /**/ bool status = false; @@ -157,13 +170,15 @@ bool mySQL::change(const string sql_command) { status = (bool)changeCatch; delete stmt; - + io.unlock(); } catch (const SQLException &error) { cout << error.what() << endl; + io.unlock(); } catch (const string error) { throw error; + io.unlock(); } /**/ diff --git a/test/test.cpp b/test/test.cpp index 77c162d..70bec39 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -10,7 +10,7 @@ int main() { try { - auto res = mydb.query("SELECT * FROM users"); + auto res = mydb.query("SELECT * FROM records"); for (auto i : res) { for (auto j: i.second) { @@ -18,9 +18,9 @@ int main() { } } - if (mydb.change("UPDATE records SET enabled = 0 WHERE domain = 'bitelex.ml'")) { - cout << "Update sucessfuly" << endl; - } + // if (mydb.change("UPDATE records SET enabled = 0 WHERE domain = 'bitelex.ml'")) { + // cout << "Update sucessfuly" << endl; + // } } catch (const SQLException error) { diff --git a/test/test.o b/test/test.o index 6958657d17432110fa8ec41a841848d0a51bd0ed..81818ce7a0e682b08847105780a711e07275aa29 100755 GIT binary patch delta 25676 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 delta 24741 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

RP6n0$R{<-6u>OxC^Hl;c5N(IU}xZ1;1FQl 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