1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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
|