зеркало из https://github.com/mozilla/pjs.git
Bug 471299: retry code and comments in nsUrlClassifierStore::WriteEntry are wrong, r=dcamp
This commit is contained in:
Родитель
42c312e721
Коммит
c77609818d
|
@ -1937,38 +1937,29 @@ nsUrlClassifierStore::DeleteEntry(nsUrlClassifierEntry& entry)
|
||||||
nsresult
|
nsresult
|
||||||
nsUrlClassifierStore::WriteEntry(nsUrlClassifierEntry& entry)
|
nsUrlClassifierStore::WriteEntry(nsUrlClassifierEntry& entry)
|
||||||
{
|
{
|
||||||
PRBool newEntry = (entry.mId == -1);
|
if (entry.mId != -1) {
|
||||||
|
// existing entry, just ignore it
|
||||||
if (newEntry) {
|
return NS_OK;
|
||||||
// The insert statement chooses a random ID for the entry, which
|
|
||||||
// might collide. This should be exceedingly rare, but we'll try
|
|
||||||
// a few times, otherwise assume a real error.
|
|
||||||
nsresult rv;
|
|
||||||
for (PRUint32 i = 0; i < 10; i++) {
|
|
||||||
mozStorageStatementScoper scoper(mInsertStatement);
|
|
||||||
|
|
||||||
rv = BindStatement(entry, mInsertStatement);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
rv = mInsertStatement->Execute();
|
|
||||||
if (NS_SUCCEEDED(rv)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
PRInt64 rowId;
|
|
||||||
rv = mConnection->GetLastInsertRowID(&rowId);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
if (rowId > PR_UINT32_MAX) {
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry.mId = rowId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mozStorageStatementScoper scoper(mInsertStatement);
|
||||||
|
|
||||||
|
nsresult rv = BindStatement(entry, mInsertStatement);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
rv = mInsertStatement->Execute();
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
PRInt64 rowId;
|
||||||
|
rv = mConnection->GetLastInsertRowID(&rowId);
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
if (rowId > PR_UINT32_MAX) {
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry.mId = rowId;
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче