diff --git a/intltool/PKGBUILD b/intltool/PKGBUILD index 79a824166a..4e680c5733 100644 --- a/intltool/PKGBUILD +++ b/intltool/PKGBUILD @@ -3,7 +3,7 @@ pkgname=intltool pkgver=0.51.0 -pkgrel=5 +pkgrel=6 pkgdesc="The internationalization tool collection" arch=('any') url="https://launchpad.net/intltool" @@ -12,12 +12,14 @@ depends=('perl-xml-parser') source=(https://launchpad.net/intltool/trunk/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz{,.asc} intltool-0.51.0-perl-5.26.patch intltool-merge-Create-cache-file-atomically.patch - intltool_distcheck-fix.patch) + intltool_distcheck-fix.patch + intltool-fixrace.patch) sha256sums=('67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334e959cd' 'SKIP' '458f5d53ac358810879080f69b11649901babcacc14471c243eb850e9436d546' '13bd6deb65dc94933f132919d4eea4c24354d7c1c1c9e5930cb6e70c75703763' - '58cb7d60796bc69c7d0865f106feb589d0271619e62f8741bff6f5ce1a2615ff') + '58cb7d60796bc69c7d0865f106feb589d0271619e62f8741bff6f5ce1a2615ff' + '5c453ccb8bfe6e0b05d7a55e66dcfa793ea81d9bbe9fdc41f668326ba9310deb') validpgpkeys=('9EBD001680E8C8F9FAC61A9BE1A701D4C9DE75B5') prepare() { @@ -25,6 +27,7 @@ prepare() { patch -Np1 -i ../intltool-0.51.0-perl-5.26.patch patch -Np1 -i ../intltool-merge-Create-cache-file-atomically.patch patch -Np1 -i ../intltool_distcheck-fix.patch + patch -Np1 -i ../intltool-fixrace.patch # https://bugs.launchpad.net/intltool/+bug/1687644 } build() { diff --git a/intltool/intltool-fixrace.patch b/intltool/intltool-fixrace.patch new file mode 100644 index 0000000000..b1cf59a903 --- /dev/null +++ b/intltool/intltool-fixrace.patch @@ -0,0 +1,43 @@ +From: Bernhard M. Wiedemann + +avoid a race where some processes try to use a partial cache file +that is still being written to. +Note that we release the lock before load_cache, +because if we got the lock, the cache is already completely written +and it is OK to have multiple parallel readers + +Index: intltool-0.51.0/intltool-merge.in +=================================================================== +--- intltool-0.51.0.orig/intltool-merge.in ++++ intltool-0.51.0/intltool-merge.in +@@ -43,6 +43,7 @@ use Getopt::Long; + use Text::Wrap; + use File::Basename; + use Encode; ++use Fcntl qw(:flock); + + my $must_end_tag = -1; + my $last_depth = -1; +@@ -392,11 +393,14 @@ sub load_cache + + sub get_cached_translation_database + { ++ open(my $lockfh, ">", "$cache_file.lock") or die $!; ++ flock($lockfh, LOCK_EX) or die "Could not lock '$cache_file.lock' - $!"; + my $cache_file_age = -M $cache_file; + if (defined $cache_file_age) + { + if ($cache_file_age <= &get_newest_po_age) + { ++ close($lockfh); + &load_cache; + return; + } +@@ -404,6 +408,7 @@ sub get_cached_translation_database + } + + &create_cache; ++ close($lockfh); + } + + sub add_translation