diff --git a/lib/softoken/sdb.c b/lib/softoken/sdb.c --- a/lib/softoken/sdb.c +++ b/lib/softoken/sdb.c @@ -1519,16 +1519,18 @@ sdb_Begin(SDB *sdb) sqlerr = sqlite3_prepare_v2(sqlDB, BEGIN_CMD, -1, &stmt, NULL); do { sqlerr = sqlite3_step(stmt); if (sqlerr == SQLITE_BUSY) { PR_Sleep(SDB_BUSY_RETRY_TIME); } + /* don't retry BEGIN transaction*/ + retry = 0; } while (!sdb_done(sqlerr, &retry)); if (stmt) { sqlite3_reset(stmt); sqlite3_finalize(stmt); } loser: diff --git a/lib/softoken/sftkdb.c b/lib/softoken/sftkdb.c --- a/lib/softoken/sftkdb.c +++ b/lib/softoken/sftkdb.c @@ -1521,17 +1521,17 @@ sftkdb_DestroyObject(SFTKDBHandle *handl if (handle == NULL) { return CKR_TOKEN_WRITE_PROTECTED; } db = SFTK_GET_SDB(handle); objectID &= SFTK_OBJ_ID_MASK; crv = (*db->sdb_Begin)(db); if (crv != CKR_OK) { - goto loser; + return crv; } crv = (*db->sdb_DestroyObject)(db, objectID); if (crv != CKR_OK) { goto loser; } /* if the database supports meta data, delete any old signatures * that we may have added */ if ((db->sdb_flags & SDB_HAS_META) == SDB_HAS_META) { @@ -2456,17 +2456,17 @@ sftkdb_Update(SFTKDBHandle *handle, SECI return CKR_OK; } /* * put the whole update under a transaction. This allows us to handle * any possible race conditions between with the updateID check. */ crv = (*handle->db->sdb_Begin)(handle->db); if (crv != CKR_OK) { - goto loser; + return crv; } inTransaction = PR_TRUE; /* some one else has already updated this db */ if (sftkdb_hasUpdate(sftkdb_TypeString(handle), handle->db, handle->updateID)) { crv = CKR_OK; goto done;