// This is the main loop. We log in as the load test user, and then perform random operations until stopped.
-void *loadtest(void *blah) {
+void *loadtest(void *ptr) {
char buf[SIZ];
int serv_sock;
+ // Find a nice spot on the screen to show the operation count for this thread.
+ int threadnum;
+ threadnum = (ptr ? (*(int *)ptr) : 0);
+ int row = 10 + (threadnum % 20);
+ int col = (threadnum / 20) * 10;
+ long ops = 0;
+ printf("\033[%d;%dH\033[33m 0\033[0m", row, col);
+ fflush(stdout);
+
serv_sock = uds_connectsock(file_citadel_socket);
if (serv_sock < 0) {
serv_puts(serv_sock, buf);
serv_gets(serv_sock, buf);
- // Find a nice spot on the screen to show the operation count for this thread.
- int row = 10 + ((serv_sock-3) % 20);
- int col = ((serv_sock-3) / 20) * 10;
- long ops = 0;
- printf("\033[%d;%dH\033[33m 0\033[0m", row, col);
- fflush(stdout);
while(1) {
perform_random_thing(serv_sock);
printf("\033[%d;%dH\033[32m%8ld\033[0m", row, col, ++ops);
exit(errno);
}
+ // set up the screen
+ for (i=0; i<nthreads; ++i) {
+ int row = 10 + (i % 20);
+ int col = (i / 20) * 10;
+ printf("\033[%d;%dH\033[31m--------\033[0m", row, col);
+ }
+ fflush(stdout);
+
// Generate a random password for load test user. No one needs this password except us.
srand(time(NULL)+getpid());
for (i=0; i<sizeof(test_pass)-1; ++i) {
setup_accounts(serv_sock);
close(serv_sock);
+ // start up load testing threads
for (i=0; i<(nthreads-1); ++i) {
-
- int row = 10 + ((i+1) % 20);
- int col = ((i+1) / 20) * 10;
- printf("\033[%d;%dH\033[31m--------\033[0m", row, col);
- fflush(stdout);
-
pthread_t thread;
pthread_attr_t attr;
int ret = 0;
ret = pthread_attr_init(&attr);
ret = pthread_attr_setstacksize(&attr, THREADSTACKSIZE);
- ret = pthread_create(&thread, &attr, loadtest, NULL);
+ ret = pthread_create(&thread, &attr, loadtest, &i);
if (ret != 0) {
exit(ret);
}
}
+
+ // now the original thread becomes load testing thread 0
loadtest(NULL);
+
+ // should never get here
return(0);
-}
\ No newline at end of file
+}
+