Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Deal l with temporary contention in pkgdb_transaction_begin() by retrying up to NTRIES times. This avoids "database is locked" failures under contention.
Jan Mikkelsen committed 12 years ago
commit 71f015ef2f14a1eb4dc7b836274f39f65b839070
parent 51f8a3e
1 file changed +7 -1
modified libpkg/pkgdb.c
@@ -1069,6 +1069,7 @@ int
pkgdb_transaction_begin(sqlite3 *sqlite, const char *savepoint)
{
	int		 ret;
+
	int		 tries;
	sqlite3_stmt	*stmt;


@@ -1091,7 +1092,12 @@ pkgdb_transaction_begin(sqlite3 *sqlite, const char *savepoint)
	}

	if (ret == SQLITE_OK)
-
		ret = sqlite3_step(stmt);
+
		for (tries = 0; tries < NTRIES; tries++) {
+
			ret = sqlite3_step(stmt);
+
			if (ret != SQLITE_BUSY)
+
				break;
+
	    		sqlite3_sleep(250);
+
		}

	sqlite3_finalize(stmt);