#include <freeradius-devel/util/debug.h>
#include <freeradius-devel/util/syserror.h>
#include <freeradius-devel/util/talloc.h>
+#include <freeradius-devel/util/semaphore.h>
#include <sys/event.h>
#include <pthread.h>
master_ctx->num_messages++;
}
-static void *control_master(UNUSED void *arg)
+static void *control_master(void *arg)
{
TALLOC_CTX *ctx;
master_ctx_t *master_ctx;
size_t i;
fr_time_t start;
+ fr_sem_t *master_sem = arg;
MEM(ctx = talloc_init_const("control_master"));
fr_control_open(control[i]);
}
+ sem_post(master_sem);
+
start = fr_time();
while (master_ctx->num_messages < (max_messages * num_workers)) {
int num_events;
pthread_t master_id, *worker_id;
size_t i;
worker_args_t *worker_args;
+ fr_sem_t *master_sem;
fr_time_start();
(void) pthread_attr_init(&attr);
(void) pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
- (void) pthread_create(&master_id, &attr, control_master, NULL);
+ master_sem = fr_sem_alloc();
+ fr_assert(master_sem != NULL);
+ (void) pthread_create(&master_id, &attr, control_master, master_sem);
+ SEM_WAIT_INTR(master_sem);
+
worker_id = talloc_array(autofree, pthread_t, num_workers);
worker_args = talloc_array(autofree, worker_args_t, num_workers);
for (i = 0; i < num_workers; i++) {
(void) pthread_join(worker_id[i], NULL);
}
+ fr_sem_free(master_sem);
talloc_free(control);
main_loop_free();