forked from pool/intltool
52ccf6f393
Add fixrace.patch to fix random desktop file corruptions (lp#1687644 boo#1021335) OBS-URL: https://build.opensuse.org/request/show/492503 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/intltool?expand=0&rev=35
44 lines
1.2 KiB
Diff
44 lines
1.2 KiB
Diff
From: Bernhard M. Wiedemann <bmwiedemann+intltool@suse.de>
|
|
|
|
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
|