sub _fork { ### safely sync/close databases, close environment ### _untie_shared_vars(); _close_BerkeleyDB_env(); ### do the fork ### my $pid = CORE::fork; if (!defined $pid || $pid) { #in parent ### re-open environment and immediately retie shared variables ### _open_BerkeleyDB_env(); _tie_share_vars(); } elsif ( $pid == 0 ) { # in child ### open environment and immediately tie shared variables ### _open_BerkeleyDB_env(); _tie_share_vars(); } else { croak( "Unable to fork" ); } return $pid; };