#!/usr/bin/perl
#
# synctest.pl
#

use strict;
use DB_File;
use Symbol;

my $dbname = "baz.db";

$| = 1;
&main;

sub thread_a
{
	print "thread_a: pid $$\n";

	## Get a lock on the database

	print STDERR "*** open the database\n";

	my %db_hash;
	my $db_obj = tie(%db_hash, "DB_File", $dbname, O_CREAT|O_RDWR, 0644)
		or die "thread_a: dbcreate $dbname $!";

	## Write a bunch of stuff to the database

	print STDERR "*** writing to database\n";

	foreach my $a (1 .. 20) {
	  foreach my $b (1 .. 100) {
	    $db_hash{"A${a}a${b}"} = "A";
	  }
	}

	## Sync the database

	print STDERR "*** sync the database\n";

	$db_obj->sync();

	## Dump the database

	print STDERR "*** dumping database\n";

	my $dump_fh = gensym;
	open $dump_fh, ">$dbname.dump01" or die "thread_a: open $dbname.dump01 $!";
	foreach ( sort keys %db_hash ) {
		print $dump_fh "$_ = $db_hash{$_}\n";
	}
	close $dump_fh;

	## Close the database

	print STDERR "*** close the database\n";

	undef $db_obj;
	untie(%db_hash);

	## Exit

	print "thread_a: exiting\n";
	exit(0);
}

sub main
{
	my %db_hash;
	my $db_obj;

	## Clear the database

	print "main: creating new empty database\n";
	
	unlink $dbname;
	$db_obj = tie(%db_hash, "DB_File", $dbname, O_CREAT|O_RDWR, 0644)
		or die "dbcreate $dbname $!";
	$db_hash{"first_record"} = "stuff";
	$db_obj->sync();
	untie(%db_hash);
	undef $db_obj;

	## Run the maid thread

	thread_a();

	## Exit

	print "main: exiting\n";
	exit 0;

}


