Shift 7.0

master
Paul Kolano 2019-10-04 14:48:02 -07:00
parent f004bcfe82
commit 82e9ad2643
3 changed files with 98 additions and 36 deletions

18
CHANGES
View File

@ -54,7 +54,7 @@ CHANGES
- Fixed table of contents truncation during remote tar creation
* Shift 4.0 (07/23/15)
- Note that this version is not backward compatible with previous versions
- Note that metadata is not backward compatible with previous versions
- Added backgroundable, parallelizable, and restartable initialization
- Added --newer and --older options for incremental backups
- Added --preallocate option to preallocate files below given sparsity
@ -196,7 +196,7 @@ CHANGES
- Fixed hash errors when remote source mapped to local file system
* Shift 6.0 (01/16/19)
- Note that this version is not backward compatible with previous versions
- Note that metadata is not backward compatible with previous versions
- Added depth-first file stage processing using --pipeline
- Added CSV history output using --history=csv
- Added disablement of email status for states given in --no-mail
@ -303,3 +303,17 @@ CHANGES
- Fixed missing write error handling in fish and fish-tcp transports
- Fixed metadata counts during tar creation renames with --restart=ignore
- Fixed bad newline handling in shift-aux escape/unescape commands
* Shift 7.0 (10/04/19)
- Note that metadata is not backward compatible with previous versions
- Fixed vulnerability in root --stats/--status due to use of Storable
when metadata directly accessible by users (bug report by J. Neff)
- Fixed race condition causing permission denied during some remote mkdirs
- Fixed built-in checksums when thread creation fails
- Fixed chattrs when thread creation fails
- Fixed leftover shift-bin processes due to unneeded chattr thread spawns
- Fixed exception when setting binmode on remote file handles
- Fixed local dmget calls during traversal when source is not local
- Fixed duplicated source tar lines in dmget input files
- Fixed deceptive thread creation errors during fish-tcp initialization

View File

@ -66,7 +66,7 @@ use Symbol qw(gensym);
use Sys::Hostname;
use Text::ParseWords;
our $VERSION = 6.03;
our $VERSION = 7.0;
# do not die when receiving sigpipe
$SIG{PIPE} = 'IGNORE';
@ -1471,17 +1471,18 @@ sub sum {
}
return if (!$perl{threads} || $opts{threads} <= 1);
# choose min of specified threads and amount of work
my $nthr = min($opts{threads}, $q->pending);
my @threads = map {threads->create(sub {
while (defined (my $sum = $q->dequeue)) {
# choose min of specified threads minus self and amount of work
my $nthr = min($opts{threads} - 1, $q->pending);
my $dqsum = sub {
while (defined (my $sum = $q->dequeue_nb)) {
my ($qi, $i, $file, $x1, $x2) = @{$sum};
my $hash = sum1($file, $x1, $x2);
$qret->enqueue([$qi, $i, $hash]);
}
})} (1 .. $nthr);
# force threads to exit
$q->enqueue(undef) foreach (@threads);
};
my @threads = map {threads->create($dqsum)} (1 .. $nthr);
# ensure work gets done even if thread creation fails
&$dqsum();
foreach (@threads) {
$_->join if ($_);
}

File diff suppressed because one or more lines are too long