Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkg check -d: Fix double locking errors
Bryan Drewery committed 11 years ago
commit 997247f1ac17b82b0c343ed02b4ef0b61312065a
parent b2b7323
1 file changed +8 -11
modified src/check.c
@@ -151,13 +151,6 @@ fix_deps(struct pkgdb *db, struct deps_head *dh, int nbpkgs, bool yes)
		return (EPKG_ENODB);
	}

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_ADVISORY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		free(pkgs);
-
		warnx("Cannot get an advisory lock on a database, it is locked by another process");
-
		return (EX_TEMPFAIL);
-
	}
-

	if (pkg_jobs_new(&jobs, PKG_JOBS_INSTALL, db) != EPKG_OK) {
		goto cleanup;
	}
@@ -199,7 +192,6 @@ cleanup:
		free(pkgs);
	if (jobs != NULL)
		pkg_jobs_free(jobs);
-
	pkgdb_release_lock(db, PKGDB_LOCK_ADVISORY);

	return (EPKG_OK);
}
@@ -401,7 +393,9 @@ exec_check(int argc, char **argv)
					if (pkg_recompute(db, pkg) != EPKG_OK) {
						rc = EX_DATAERR;
					}
-
					pkgdb_release_lock(db, PKGDB_LOCK_EXCLUSIVE);
+
					pkgdb_downgrade_lock(db,
+
					    PKGDB_LOCK_EXCLUSIVE,
+
					    PKGDB_LOCK_ADVISORY);
				}
				else {
					rc = EX_TEMPFAIL;
@@ -416,7 +410,9 @@ exec_check(int argc, char **argv)
						pkg_printf("Failed to reanalyse for shlibs: %n\n", pkg);
						rc = EX_UNAVAILABLE;
					}
-
					pkgdb_release_lock(db, PKGDB_LOCK_EXCLUSIVE);
+
					pkgdb_downgrade_lock(db,
+
					    PKGDB_LOCK_EXCLUSIVE,
+
					    PKGDB_LOCK_ADVISORY);
				}
				else {
					rc = EX_TEMPFAIL;
@@ -436,7 +432,8 @@ exec_check(int argc, char **argv)
					db = NULL;
					rc = EX_IOERR;
				}
-
				pkgdb_release_lock(db, PKGDB_LOCK_EXCLUSIVE);
+
				pkgdb_downgrade_lock(db, PKGDB_LOCK_EXCLUSIVE,
+
				    PKGDB_LOCK_ADVISORY);
				if (rc == EX_IOERR)
					goto cleanup;
			}