From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

package t10 ;
use strict ;
use Test ;
BEGIN {
# Leave previous server enough time to die...
sleep(1) ;
if ($ENV{PERL_INLINE_JAVA_JNI}){
plan(tests => 0) ;
exit ;
}
elsif (! Inline::Java::Portable::portable('GOT_FORK')){
plan(tests => 0) ;
exit ;
}
else{
$t10::nb = 5 ;
plan(tests => $t10::nb + 3) ;
}
}
use Inline (
Java => 't/shared.java',
SHARED_JVM => 1,
PORT => 17892,
NAME => 't10',
) ;
$t10::t10::i = 0 ;
my $nb = $t10::nb ;
my $sum = (($nb) * ($nb + 1)) / 2 ;
for (my $i = 0 ; $i < $nb ; $i++){
if (! fork()){
do_child($i) ;
}
}
# Wait for kids to finish
for (my $i = 0 ; $i < $nb ; $i++){
wait() ;
ok(1) ;
}
ok($t10::t10::i, $sum) ;
# Bring down the JVM
ok(! Inline::Java::i_am_JVM_owner()) ;
Inline::Java::capture_JVM() ;
ok(Inline::Java::i_am_JVM_owner()) ;
sub do_child {
my $i = shift ;
Inline::Java::reconnect_JVM() ;
my $t = new t10::t10() ;
for (my $j = 0 ; $j <= $i ; $j++){
$t->incr() ;
}
exit ;
}