diff options
author | se <se@FreeBSD.org> | 2016-07-16 15:13:24 +0800 |
---|---|---|
committer | se <se@FreeBSD.org> | 2016-07-16 15:13:24 +0800 |
commit | a06bbd7b5d102df01db065d4e625e8b40064d178 (patch) | |
tree | b89f6dadd890571e0a8ad4d6a38c9945f15e5ee8 | |
parent | 54eec6c07ca8cda2569e59ff604653c67e8029f0 (diff) | |
download | freebsd-ports-gnome-a06bbd7b5d102df01db065d4e625e8b40064d178.tar.gz freebsd-ports-gnome-a06bbd7b5d102df01db065d4e625e8b40064d178.tar.zst freebsd-ports-gnome-a06bbd7b5d102df01db065d4e625e8b40064d178.zip |
A read lock on the sqlite file used by pkg can lock out writers for
indefinite amounts of time, preventing installation or upgrade of
ports with portmaster. Instead of using a pipe to read pkg query
input to be consumed by a shell loop, buffer the query result in a
shell variable and let the loop iterate over the contents of this
variable.
While here, use a call to all_pkgs_by_origin() instead of an inline
versin of equivalent code.
Reviewed by: tz
Approved by: tz
-rw-r--r-- | ports-mgmt/portmaster/files/patch-portmaster | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/ports-mgmt/portmaster/files/patch-portmaster b/ports-mgmt/portmaster/files/patch-portmaster new file mode 100644 index 000000000000..deaf4682be01 --- /dev/null +++ b/ports-mgmt/portmaster/files/patch-portmaster @@ -0,0 +1,67 @@ +--- portmaster.orig 2016-02-05 22:36:56 UTC ++++ portmaster +@@ -1239,7 +1239,8 @@ all_pkgs_by_origin () { + echo $iport $origin + done + else +- pkg query -a "%n-%v %o" ++ namesorigins=`pkg query -a "%n-%v %o"` ++ echo "$namesorigins" + fi + return + } +@@ -1644,42 +1645,19 @@ if [ -n "$CHECK_PORT_DBDIR" ]; then + unique_list=':' + + echo "===>>> Building list of installed port names"; echo '' +- if [ -z "$use_pkgng" ]; then +- for pkg in $pdb/*; do +- [ -d $pkg ] || continue +- +- iport=${pkg#$pdb/} +- origin=`origin_from_pdb $iport` || continue +- +- if [ ! -d "$pd/$origin" ]; then +- find_moved_port $origin $iport nonfatal >/dev/null +- [ -n "$moved_npd" ] || continue +- origin=$moved_npd +- fi +- +- if ! pm_cd $pd/$origin; then +- echo " ===>>> $pd/$origin does not exist for $pkg" +- continue +- fi +- unique_list="${unique_list}`make -V UNIQUENAME -V OPTIONS_NAME | tr '\n' ':'`" +- done +- else +- while read pkg origin; do +- if [ ! -d "$pd/$origin" ]; then +- find_moved_port $origin $pkg nonfatal >/dev/null +- [ -n "$moved_npd" ] || continue +- origin=$moved_npd +- fi ++ all_pkgs_by_origin | while read pkg origin; do ++ if [ ! -d "$pd/$origin" ]; then ++ find_moved_port $origin $pkg nonfatal >/dev/null ++ [ -n "$moved_npd" ] || continue ++ origin=$moved_npd ++ fi + +- if ! pm_cd $pd/$origin; then +- echo " ===>>> $pd/$origin does not exist for $pkg" +- continue +- fi +- unique_list="${unique_list}`make -V UNIQUENAME -V OPTIONS_NAME | tr '\n' ':'`" +- done <<-EOF +- $(pkg query -a "%n-%v %o") +- EOF +- fi ++ if ! pm_cd $pd/$origin; then ++ echo " ===>>> $pd/$origin does not exist for $pkg" ++ continue ++ fi ++ unique_list="${unique_list}`make -V UNIQUENAME -V OPTIONS_NAME | tr '\n' ':'`" ++ done + + echo "===>>> Checking $port_dbdir" + |