diff options
-rw-r--r-- | src/sort.c | 14 | ||||
-rwxr-xr-x | tests/misc/sort-merge | 7 |
2 files changed, 13 insertions, 8 deletions
diff --git a/src/sort.c b/src/sort.c index 13935218a..2039dabf8 100644 --- a/src/sort.c +++ b/src/sort.c @@ -1105,14 +1105,7 @@ specify_nmerge (int oi, char c, char const *s) e = LONGINT_OVERFLOW; } else - { - /* Need to re-check that we meet the minimum - requirement for memory usage with the new, - potentially larger, nmerge. */ - sort_size = MAX (sort_size, MIN_SORT_SIZE); - - return; - } + return; } } @@ -3320,6 +3313,11 @@ main (int argc, char **argv) files = − } + /* Need to re-check that we meet the minimum requirement for memory + usage with the final value for NMERGE. */ + if (0 < sort_size) + sort_size = MAX (sort_size, MIN_SORT_SIZE); + if (checkonly) { if (nfiles > 1) diff --git a/tests/misc/sort-merge b/tests/misc/sort-merge index a2524c40c..fb7c63cc1 100755 --- a/tests/misc/sort-merge +++ b/tests/misc/sort-merge @@ -27,6 +27,8 @@ my $prog = 'sort'; # three empty files and one that says 'foo' my @inputs = (+(map{{IN=> {"empty$_"=> ''}}}1..3), {IN=> {foo=> "foo\n"}}); +my $big_input = "aaa\n" x 1024; + # don't need to check for existence, since we're running in a temp dir my $badtmp = 'does/not/exist'; @@ -66,6 +68,11 @@ my @Tests = ['nmerge-no', "-m --batch-size=2 -T$badtmp", @inputs, {ERR_SUBST=>"s|: $badtmp/sort.+||"}, {ERR=>"$prog: cannot create temporary file\n"}, {EXIT=>2}], + + # This used to fail because setting batch-size without also setting + # buffer size would cause the buffer size to be set to the minimum. + ['batch-size', "--batch-size=16 -T$badtmp", {IN=> {big=> $big_input}}, + {OUT=>$big_input}], ); my $save_temps = $ENV{DEBUG}; |