| diff -u old/ new/ |
| --- old/Makefile.in 2008-09-18 14:43:55.000000000 -0700 |
| +++ new/Makefile.in 2008-09-18 14:42:53.000000000 -0700 |
| @@ -22,10 +22,10 @@ |
| all: dbench tbench tbench_srv |
| |
| dbench: $(DB_OBJS) |
| - $(CC) -o $@ $(DB_OBJS) $(LIBS) |
| + $(CC) -lpthread -o $@ $(DB_OBJS) $(LIBS) |
| |
| tbench: $(TB_OBJS) |
| - $(CC) -o $@ $(TB_OBJS) $(LIBS) |
| + $(CC) -lpthread -o $@ $(TB_OBJS) $(LIBS) |
| |
| tbench_srv: $(SRV_OBJS) |
| $(CC) -o $@ $(SRV_OBJS) $(LIBS) |
| diff -u old/ new/ |
| --- old/dbench.c 2008-09-18 14:43:49.000000000 -0700 |
| +++ new/dbench.c 2008-09-18 14:42:46.000000000 -0700 |
| @@ -130,6 +130,8 @@ |
| int synccount; |
| struct timeval tv; |
| FILE *load; |
| + int shmid; |
| + sem_t *sema; |
| |
| load = open_loadfile(); |
| if (load == NULL) { |
| @@ -162,12 +164,24 @@ |
| children[i].directory = directory; |
| } |
| |
| + shmid = shmget(IPC_PRIVATE, sizeof(*sema), IPC_CREAT | 0666); |
| + if (shmid < 0) { |
| + perror("could not create shared memory segment"); |
| + exit(1); |
| + } |
| + sema = shmat(shmid, NULL, 0); |
| + |
| + if (sem_init(sema, 1, 0) < 0) { |
| + perror("semaphore initilization failed"); |
| + exit(1); |
| + } |
| + |
| for (i=0;i<nprocs;i++) { |
| if (fork() == 0) { |
| setlinebuf(stdout); |
| nb_setup(&children[i]); |
| children[i].status = getpid(); |
| - pause(); |
| + sem_wait(sema); |
| fn(&children[i], loadfile); |
| _exit(0); |
| } |
| @@ -185,12 +199,14 @@ |
| |
| if (synccount != nprocs) { |
| printf("FAILED TO START %d CLIENTS (started %d)\n", nprocs, synccount); |
| + shmdt(sema); |
| return; |
| } |
| |
| printf("%d clients started\n", nprocs); |
| |
| - kill(0, SIGCONT); |
| + for (i=0;i<nprocs;i++) |
| + sem_post(sema); |
| |
| tv_start = timeval_current(); |
| |
| @@ -202,6 +218,7 @@ |
| if (WEXITSTATUS(status) != 0) { |
| printf("Child failed with status %d\n", |
| WEXITSTATUS(status)); |
| + shmdt(sema); |
| exit(1); |
| } |
| i++; |
| @@ -210,6 +227,8 @@ |
| alarm(0); |
| sig_alarm(SIGALRM); |
| |
| + shmdt(sema); |
| + |
| printf("\n"); |
| } |
| |
| diff -u old/ new/ |
| --- old/dbench.h 2008-09-18 14:43:48.000000000 -0700 |
| +++ new/dbench.h 2008-09-18 14:42:48.000000000 -0700 |
| @@ -35,6 +35,7 @@ |
| #include <sys/ipc.h> |
| #include <sys/shm.h> |
| #include <sys/mman.h> |
| +#include <semaphore.h> |
| |
| #ifdef HAVE_SYS_VFS_H |
| #include <sys/vfs.h> |