This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Set a large thread stack when running the regex tests in a thread.
authorNicholas Clark <nick@ccl4.org>
Tue, 30 Jul 2013 17:59:48 +0000 (19:59 +0200)
committerNicholas Clark <nick@ccl4.org>
Thu, 1 Aug 2013 10:02:00 +0000 (12:02 +0200)
For testing ithreads cloning, all the regex tests are run twice. Once
"normally", and once in a child ithread, to verify that all regex
constructions can be cloned.

The recently added tests for backreferences starting with 8 or 9 causes a
lot of C recursion in the child thread, enough to bust the default thread
stack size on (at least) HP-UX. So set a large explicit thread stack size.
It doesn't matter that it's large, as we are only running one child thread.

t/re/pat.t
t/thread_it.pl

index 020068c..fcc52ca 100644 (file)
@@ -1419,6 +1419,8 @@ EOP
     {
         # if we have 87 capture buffers defined then \87 should refer to the 87th.
         # test that this is true for 1..100
+        # Note that this test causes the engine to recurse at runtime, and henc
+        # use a lot of C stack.
         for my $i (1..100) {
             my $capture= "a";
             $capture= "($capture)" for 1 .. $i;
index 37d4680..aa5e18b 100644 (file)
@@ -26,7 +26,12 @@ require $file;
 
 note('running tests in a new thread');
 
-my $curr = threads->create(sub {
+# Currently 59*4096 is the minimum stack size to just get t/re/pat_thr.t to
+# pass on HP-UX 64bit PA-RISC. The test for capture buffers (eg \87)
+# recurses heavily, and busts the default stack size (65536 on PA-RISC)
+my $curr = threads->create({
+                            stack_size => 524288,
+                           }, sub {
                               run_tests();
                               return defined &curr_test ? curr_test() : ()
                           })->join();