Bug 471299: retry code and comments in nsUrlClassifierStore::WriteEntry are wrong, r=dcamp

This commit is contained in:
Gavin Sharp 2009-01-16 14:19:28 -05:00
Родитель 42c312e721
Коммит c77609818d
1 изменённых файлов: 21 добавлений и 30 удалений

Просмотреть файл

@ -1937,38 +1937,29 @@ nsUrlClassifierStore::DeleteEntry(nsUrlClassifierEntry& entry)
nsresult
nsUrlClassifierStore::WriteEntry(nsUrlClassifierEntry& entry)
{
PRBool newEntry = (entry.mId == -1);
if (newEntry) {
// 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;
if (entry.mId != -1) {
// existing entry, just ignore it
return NS_OK;
}
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;
}