#include #include #include #include #include #include #include #include #include #include #include #include #include "tdb.h" /* this tests tdb by doing lots of ops from several simultaneous writers - that stresses the locking code. Build with TDB_DEBUG=1 for best effect */ #define REOPEN_PROB 30 #define DELETE_PROB 8 #define STORE_PROB 4 #define APPEND_PROB 6 #define LOCKSTORE_PROB 0 #define TRAVERSE_PROB 20 #define CULL_PROB 100 #define KEYLEN 3 #define DATALEN 100 #define LOCKLEN 20 static TDB_CONTEXT *db; static void tdb_log(TDB_CONTEXT *tdb, int level, const char *format, ...) { va_list ap; va_start(ap, format); vfprintf(stdout, format, ap); va_end(ap); fflush(stdout); #if 0 { char *ptr; asprintf(&ptr,"xterm -e gdb /proc/%d/exe %d", getpid(), getpid()); system(ptr); free(ptr); } #endif } static void fatal(char *why) { perror(why); exit(1); } static char *randbuf(int len) { char *buf; int i; buf = (char *)malloc(len+1); for (i=0;i