# Test of asynchronous hash access courtesy of Tim Fries BEGIN { $^W = 1; $| = 1; $SIG{INT} = sub { die }; print "1..5\n"; } use strict; use Carp; use IPC::Shareable; my $t = 1; my $ok = 1; my $awake = 0; local $SIG{ALRM} = sub { $awake = 1 }; my $ppid = $$; my $pid = fork; defined $pid or die "Cannot fork : $!"; if ($pid == 0) { # --- Child sleep unless $awake; $awake = 0; ++$t; my %thash = (); tie(%thash, 'IPC::Shareable', 'hobj', { destroy => 0 }) or undef $ok; print $ok ? "ok $t\n" : "not ok $t\n"; $thash{'foo'} = "marlinspike"; $thash{'bar'} = "ballyhoo"; $thash{'quux'} = "calvinball"; kill ALRM => $ppid; sleep unless $awake; ++$t; $ok = (defined $thash{'foo'} && $thash{'foo'} eq "marlinspike"); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = (defined $thash{'bar'} && $thash{'bar'} eq "ballyhoo"); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; $ok = (defined $thash{'quux'} && $thash{'quux'} eq "calvinball"); print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; exit; } else { # --- Parent my $awake = 0; local $SIG{ALRM} = sub { $awake = 1 }; my %thash = (); tie(%thash, 'IPC::Shareable', 'hobj', { create => 'yes' }) or undef $ok; print $ok ? "ok $t\n" : "not ok $t\n"; ++$t; kill ALRM => $pid; sleep unless $awake; ++$t; $thash{'intel'} = "expensive"; $thash{'amd'} = "volthungry"; $thash{'cyrix'} = "mia"; kill ALRM => $pid; waitpid($pid, 0); IPC::Shareable->clean_up_all; } # --- Done! exit;