Hanging locks.

This commit is contained in:
JoelKatz
2013-04-18 20:14:28 -07:00
parent 3b90dfdcd1
commit bd3dc23f9e
3 changed files with 11 additions and 1 deletions

View File

@@ -65,6 +65,10 @@ void SqliteDatabase::disconnect()
// returns true if the query went ok // returns true if the query went ok
bool SqliteDatabase::executeSQL(const char* sql, bool fail_ok) bool SqliteDatabase::executeSQL(const char* sql, bool fail_ok)
{ {
#ifdef DEBUG_HANGING_LOCKS
assert(fail_ok || (mCurrentStmt == NULL));
#endif
sqlite3_finalize(mCurrentStmt); sqlite3_finalize(mCurrentStmt);
int rc = sqlite3_prepare_v2(mConnection, sql, -1, &mCurrentStmt, NULL); int rc = sqlite3_prepare_v2(mConnection, sql, -1, &mCurrentStmt, NULL);
@@ -79,8 +83,8 @@ bool SqliteDatabase::executeSQL(const char* sql, bool fail_ok)
cLog(lsWARNING) << "Error: " << sqlite3_errmsg(mConnection); cLog(lsWARNING) << "Error: " << sqlite3_errmsg(mConnection);
#endif #endif
} }
return false;
endIterRows(); endIterRows();
return false;
} }
rc = sqlite3_step(mCurrentStmt); rc = sqlite3_step(mCurrentStmt);
if (rc == SQLITE_ROW) if (rc == SQLITE_ROW)

View File

@@ -84,6 +84,7 @@ bool ConnectionPool::savePeer(const std::string& strIp, int iPort, char code)
// is lost. // is lost.
nothing(); nothing();
} }
db->endIterRows();
} }
else else
{ {
@@ -146,6 +147,7 @@ bool ConnectionPool::peerAvailable(std::string& strIp, int& iPort)
&& db->startIterRows()) && db->startIterRows())
{ {
strIpPort = db->getStrBinary("IpPort"); strIpPort = db->getStrBinary("IpPort");
db->endIterRows();
} }
} }
@@ -515,6 +517,7 @@ bool ConnectionPool::peerScanSet(const std::string& strIp, int iPort)
//cLog(lsINFO) << str(boost::format("Pool: Scan: schedule exists: %s %s (next %s, delay=%d)") //cLog(lsINFO) << str(boost::format("Pool: Scan: schedule exists: %s %s (next %s, delay=%d)")
// % mScanIp % mScanPort % tpNext % (tpNext-tpNow).total_seconds()); // % mScanIp % mScanPort % tpNext % (tpNext-tpNow).total_seconds());
} }
db->endIterRows();
} }
else else
{ {
@@ -680,6 +683,7 @@ void ConnectionPool::scanRefresh()
db->getStr("IpPort", strIpPort); db->getStr("IpPort", strIpPort);
iInterval = db->getInt("ScanInterval"); iInterval = db->getInt("ScanInterval");
db->endIterRows();
} }
else else
{ {

View File

@@ -1625,9 +1625,11 @@ void UniqueNodeList::nodeBootstrap()
if (db->executeSQL(str(boost::format("SELECT COUNT(*) AS Count FROM SeedDomains WHERE Source='%s' OR Source='%c';") % vsManual % vsValidator)) && db->startIterRows()) if (db->executeSQL(str(boost::format("SELECT COUNT(*) AS Count FROM SeedDomains WHERE Source='%s' OR Source='%c';") % vsManual % vsValidator)) && db->startIterRows())
iDomains = db->getInt("Count"); iDomains = db->getInt("Count");
db->endIterRows();
if (db->executeSQL(str(boost::format("SELECT COUNT(*) AS Count FROM SeedNodes WHERE Source='%s' OR Source='%c';") % vsManual % vsValidator)) && db->startIterRows()) if (db->executeSQL(str(boost::format("SELECT COUNT(*) AS Count FROM SeedNodes WHERE Source='%s' OR Source='%c';") % vsManual % vsValidator)) && db->startIterRows())
iNodes = db->getInt("Count"); iNodes = db->getInt("Count");
db->endIterRows();
} }
bool bLoaded = iDomains || iNodes; bool bLoaded = iDomains || iNodes;