This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
locale.c: Not so aggressive collation memory use guess
authorKarl Williamson <khw@cpan.org>
Tue, 12 Apr 2016 20:28:57 +0000 (14:28 -0600)
committerKarl Williamson <khw@cpan.org>
Tue, 24 May 2016 16:28:38 +0000 (10:28 -0600)
On platforms where  strxfrm() is not well-behaved, and it fails because
it needs a larger buffer, prior to this commit, the size was doubled
before trying again.  This could require a lot of memory on large
inputs.  I'm uncomfortable with such a big delta on very large strings.
This commit changes it so it is not so aggressive.  Note that this now
only gets called on platforms whose strxfrm() is not well behaved, and I
think the size prediction is better due to a recent commit, and there
isn't really much of a downside in not gobbling up memory so fast.

locale.c

index 9414eb4..48b9184 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -1782,7 +1782,7 @@ Perl__mem_collxfrm(pTHX_ const char *input_string,
                 *      isn't sufficient, they return the input size instead of
                 *      how much is needed.)
                 * Increase the buffer size by a fixed percentage and try again. */
-            xAlloc = (2 * xAlloc) + 1;
+            xAlloc += (xAlloc / 4) + 1;
             PL_strxfrm_is_behaved = FALSE;
 
 #ifdef DEBUGGING