use critical section to protect global TablesInUse (patch 1660652)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44642 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-03-07 21:28:05 +00:00
parent 63e0279662
commit 72a061ccd2
2 changed files with 32 additions and 22 deletions

View File

@@ -63,6 +63,7 @@ wxChar const *SQL_CATALOG_FILENAME = wxT("catalog.txt");
#ifdef __WXDEBUG__
extern wxList TablesInUse;
extern wxCriticalSection csTablesInUse;
#endif
// SQL Log defaults to be used by GetDbConnection
@@ -1746,6 +1747,8 @@ void wxDb::Close(void)
wxASSERT(nTables == 0);
#ifdef __WXDEBUG__
{
wxCriticalSectionLocker lock(csTablesInUse);
wxTablesInUse *tiu;
wxList::compatibility_iterator pNode;
pNode = TablesInUse.GetFirst();
@@ -1762,6 +1765,7 @@ void wxDb::Close(void)
}
pNode = pNode->GetNext();
}
}
#endif
// Copy the error messages to a global variable
@@ -2306,7 +2310,6 @@ bool wxDb::ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcol
return false;
}
pColInf[colNum].sqlDataType = Sqllen;
switch (Sqllen)
{
#if wxUSE_UNICODE

View File

@@ -60,6 +60,7 @@ ULONG lastTableID = 0;
#ifdef __WXDEBUG__
wxList TablesInUse;
wxCriticalSection csTablesInUse;
#endif
@@ -182,7 +183,10 @@ bool wxDbTable::initialize(wxDb *pwxDb, const wxString &tblName, const UWORD num
tableInUse->tableName = tblName;
tableInUse->tableID = tableID;
tableInUse->pDb = pDb;
{
wxCriticalSectionLocker lock(csTablesInUse);
TablesInUse.Append(tableInUse);
}
#endif
pDb->WriteSqlLog(s);
@@ -308,8 +312,10 @@ void wxDbTable::cleanup()
bool found = false;
wxList::compatibility_iterator pNode;
{
wxCriticalSectionLocker lock(csTablesInUse);
pNode = TablesInUse.GetFirst();
while (pNode && !found)
while (!found && pNode)
{
if (((wxTablesInUse *)pNode->GetData())->tableID == tableID)
{
@@ -320,6 +326,7 @@ void wxDbTable::cleanup()
else
pNode = pNode->GetNext();
}
}
if (!found)
{
wxString msg;