weighttp/src/worker.c

58 řádky
1.1 KiB
C

/*
* weighttp - a lightweight and simple webserver benchmarking tool
*
* Author:
* Copyright (c) 2009 Thomas Porzelt
*
* License:
* MIT, see COPYING file
*/
#include "weighttp.h"
Worker *worker_new(uint8_t id, Config *config, uint16_t num_clients, uint64_t num_requests) {
Worker *worker;
uint16_t i;
worker = W_MALLOC(Worker, 1);
worker->id = id;
worker->loop = ev_loop_new(0);
ev_ref(worker->loop);
worker->config = config;
worker->num_clients = num_clients;
worker->stats.req_todo = num_requests;
worker->clients = W_MALLOC(Client*, num_clients);
for (i = 0; i < num_clients; i++) {
if (NULL == (worker->clients[i] = client_new(worker)))
return NULL;
}
return worker;
}
void worker_free(Worker *worker) {
uint16_t i;
for (i = 0; i < worker->num_clients; i++)
client_free(worker->clients[i]);
free(worker->clients);
free(worker);
}
void *worker_thread(void* arg) {
uint16_t i;
Worker *worker = (Worker*)arg;
/* start all clients */
for (i = 0; i < worker->num_clients; i++) {
client_state_machine(worker->clients[i]);
}
ev_loop(worker->loop, 0);
ev_loop_destroy(worker->loop);
return NULL;
}