database: flip to recursive_mutex to allow nested locks (#1937)
* Fix crash from db locking * Change db lock to use recursive_mutex
This commit is contained in:
parent
5ba9816377
commit
c5087d7a39
@ -70,7 +70,7 @@ public:
|
|||||||
const DatabaseInfo &GetInfo();
|
const DatabaseInfo &GetInfo();
|
||||||
private:
|
private:
|
||||||
MYSQL *m_mysql;
|
MYSQL *m_mysql;
|
||||||
std::mutex m_FullLock;
|
std::recursive_mutex m_FullLock;
|
||||||
|
|
||||||
/* ---------- */
|
/* ---------- */
|
||||||
DatabaseInfo m_Info;
|
DatabaseInfo m_Info;
|
||||||
|
@ -71,7 +71,7 @@ public:
|
|||||||
void SetLastIDAndRows(unsigned int insertID, unsigned int affectedRows);
|
void SetLastIDAndRows(unsigned int insertID, unsigned int affectedRows);
|
||||||
private:
|
private:
|
||||||
PGconn *m_pgsql;
|
PGconn *m_pgsql;
|
||||||
std::mutex m_FullLock;
|
std::recursive_mutex m_FullLock;
|
||||||
|
|
||||||
unsigned int m_lastInsertID;
|
unsigned int m_lastInsertID;
|
||||||
unsigned int m_lastAffectedRows;
|
unsigned int m_lastAffectedRows;
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
sqlite3 *m_sq3;
|
sqlite3 *m_sq3;
|
||||||
std::mutex m_FullLock;
|
std::recursive_mutex m_FullLock;
|
||||||
bool m_Persistent;
|
bool m_Persistent;
|
||||||
String m_LastError;
|
String m_LastError;
|
||||||
int m_LastErrorCode;
|
int m_LastErrorCode;
|
||||||
|
@ -959,6 +959,10 @@ native bool SQL_Execute(Handle statement);
|
|||||||
* If the lock cannot be acquired, the main thread will pause until the
|
* If the lock cannot be acquired, the main thread will pause until the
|
||||||
* threaded operation has concluded.
|
* threaded operation has concluded.
|
||||||
*
|
*
|
||||||
|
* Care should be taken to not lock an already-locked database. Internally,
|
||||||
|
* lock calls are nested recursively and must be paired with an equal amount
|
||||||
|
* of unlocks to be undone. This behaviour should not be relied on.
|
||||||
|
*
|
||||||
* @param database A database Handle.
|
* @param database A database Handle.
|
||||||
* @error Invalid database Handle.
|
* @error Invalid database Handle.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user