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