Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Improve locking for pkg-upgrade.
Vsevolod Stakhov committed 12 years ago
commit 2a4e70a835e46bf4c0907531c6c07fb0fdcfb3dd
parent 498ee1a
1 file changed +5 -2
modified src/upgrade.c
@@ -51,6 +51,7 @@ exec_upgrade(int argc, char **argv)
	int retcode;
	int updcode;
	int ch;
+
	int lock_type = PKGDB_LOCK_ADVISORY;
	bool yes, yes_arg;
	bool dry_run = false;
	bool auto_update;
@@ -74,10 +75,12 @@ exec_upgrade(int argc, char **argv)
			break;
		case 'n':
			f |= PKG_FLAG_DRY_RUN;
+
			lock_type = PKGDB_LOCK_READONLY;
			dry_run = true;
			break;
		case 'F':
			f |= PKG_FLAG_SKIP_INSTALL;
+
			lock_type = PKGDB_LOCK_READONLY;
			break;
		case 'q':
			quiet = true;
@@ -132,7 +135,7 @@ exec_upgrade(int argc, char **argv)
	if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK)
		return (EX_IOERR);

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_ADVISORY, 0, 0) != EPKG_OK) {
+
	if (pkgdb_obtain_lock(db, lock_type, 0, 0) != EPKG_OK) {
		pkgdb_close(db);
		warnx("Cannot get an advisory lock on a database, it is locked by another process");
		return (EX_TEMPFAIL);
@@ -184,7 +187,7 @@ exec_upgrade(int argc, char **argv)

cleanup:
	pkg_jobs_free(jobs);
-
	pkgdb_release_lock(db, PKGDB_LOCK_ADVISORY);
+
	pkgdb_release_lock(db, lock_type);
	pkgdb_close(db);

	if (!yes && newpkgversion)