I've started running some large Test::More programs (perl 5.8.4) under Windows and noticed that each ok() appears to consume 14 Windows semaphore handles. The test program below demonstrates.

use strict; use Test::More; my $niter = shift or die "usage: $0 number-of-iterations\n"; plan tests => $niter; ok(1) for 1 .. $niter; print "Look at handle count in Windows Task Manager\n"; print "Then press [RETURN] to exit...\n";<STDIN>;

For example, when I run this program for 10,000 iterations, Windows Task Manager reports there are 140,021 handles being used by the perl process. The sysinternals nthandle utility reports they are mainly semaphore handles.

I suspect the underlying reason for all these semaphore handles is the use of share() in Test::Builder. For example:

# Test to simulate semaphore growth in Test::Builder. # Grows by 4 semaphore handles per iteration. use strict; use threads; use threads::shared; my @Test_Results = (); share(@Test_Results); sub ok { my $result = {}; share($result); push(@Test_Results, $result); } my $niter = shift or die "usage: $0 number-of-iterations\n"; ok(1) for 1 .. $niter; print "Look at handle count in Windows Task Manager\n"; print "Then press [RETURN] to exit...\n";<STDIN>;

This is not a handle leak in that the handles are released when the variable goes out of scope.

I'm wondering if anyone has seen this issue before or can shed some more light on it. Since you should generally try to keep each test program quite small, it's unlikely to prove a practical limitation. However, it may prevent you from writing very large stress tests due to handle starvation.


In reply to Test::More and semaphore handles on Windows by eyepopslikeamosquito

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.