1 diff -u old/ new/ 2 --- old/Makefile.in 2008-09-18 14:43:55.000000000 -0700 3 +++ new/Makefile.in 2008-09-18 14:42:53.000000000 -0700 4 @@ -22,10 +22,10 @@ 5 all: dbench tbench tbench_srv 6 7 dbench: $(DB_OBJS) 8 - $(CC) -o $@ $(DB_OBJS) $(LIBS) 9 + $(CC) -lpthread -o $@ $(DB_OBJS) $(LIBS) 10 11 tbench: $(TB_OBJS) 12 - $(CC) -o $@ $(TB_OBJS) $(LIBS) 13 + $(CC) -lpthread -o $@ $(TB_OBJS) $(LIBS) 14 15 tbench_srv: $(SRV_OBJS) 16 $(CC) -o $@ $(SRV_OBJS) $(LIBS) 17 diff -u old/ new/ 18 --- old/dbench.c 2008-09-18 14:43:49.000000000 -0700 19 +++ new/dbench.c 2008-09-18 14:42:46.000000000 -0700 20 @@ -130,6 +130,8 @@ 21 int synccount; 22 struct timeval tv; 23 FILE *load; 24 + int shmid; 25 + sem_t *sema; 26 27 load = open_loadfile(); 28 if (load == NULL) { 29 @@ -162,12 +164,24 @@ 30 children[i].directory = directory; 31 } 32 33 + shmid = shmget(IPC_PRIVATE, sizeof(*sema), IPC_CREAT | 0666); 34 + if (shmid < 0) { 35 + perror("could not create shared memory segment"); 36 + exit(1); 37 + } 38 + sema = shmat(shmid, NULL, 0); 39 + 40 + if (sem_init(sema, 1, 0) < 0) { 41 + perror("semaphore initilization failed"); 42 + exit(1); 43 + } 44 + 45 for (i=0;i<nprocs;i++) { 46 if (fork() == 0) { 47 setlinebuf(stdout); 48 nb_setup(&children[i]); 49 children[i].status = getpid(); 50 - pause(); 51 + sem_wait(sema); 52 fn(&children[i], loadfile); 53 _exit(0); 54 } 55 @@ -185,12 +199,14 @@ 56 57 if (synccount != nprocs) { 58 printf("FAILED TO START %d CLIENTS (started %d)\n", nprocs, synccount); 59 + shmdt(sema); 60 return; 61 } 62 63 printf("%d clients started\n", nprocs); 64 65 - kill(0, SIGCONT); 66 + for (i=0;i<nprocs;i++) 67 + sem_post(sema); 68 69 tv_start = timeval_current(); 70 71 @@ -202,6 +218,7 @@ 72 if (WEXITSTATUS(status) != 0) { 73 printf("Child failed with status %d\n", 74 WEXITSTATUS(status)); 75 + shmdt(sema); 76 exit(1); 77 } 78 i++; 79 @@ -210,6 +227,8 @@ 80 alarm(0); 81 sig_alarm(SIGALRM); 82 83 + shmdt(sema); 84 + 85 printf("\n"); 86 } 87 88 diff -u old/ new/ 89 --- old/dbench.h 2008-09-18 14:43:48.000000000 -0700 90 +++ new/dbench.h 2008-09-18 14:42:48.000000000 -0700 91 @@ -35,6 +35,7 @@ 92 #include <sys/ipc.h> 93 #include <sys/shm.h> 94 #include <sys/mman.h> 95 +#include <semaphore.h> 96 97 #ifdef HAVE_SYS_VFS_H 98 #include <sys/vfs.h> 99