void task_func(void *sched) { struct timeval prev; printf("%s start\n", __FUNCTION__); XTEST(gettimeofday(&prev, NULL) == 0); rinoo_task_wait(sched, 100); XTEST(check_time(&prev, 100) == 0); rinoo_task_wait(sched, 200); XTEST(check_time(&prev, 200) == 0); rinoo_task_wait(sched, 500); XTEST(check_time(&prev, 500) == 0); rinoo_task_wait(sched, 1000); XTEST(check_time(&prev, 1000) == 0); printf("%s end\n", __FUNCTION__); }
void event_generator(void *sched) { int i; int fd; char path[100]; rinoo_task_wait(sched, 200); for (i = 0; i < NB_EVENT / 2; i++) { snprintf(path, sizeof(path), TEST_DIRECTORY ".inotify.XXXXXX"); fd = mkstemp(path); close(fd); rinoo_log("Event generator: file created."); nb_create++; rinoo_task_wait(sched, 200); unlink(path); nb_rm++; rinoo_log("Event generator: file removed."); rinoo_task_wait(sched, 200); } }
void rsc_start_client(void *client_sched) { bool redo; uint32_t i; t_email email; t_session session = { 0 }; redo = true; email = *config->email; session.email = &email; session.helo = config->session.helo; session.read = buffer_create(NULL); if (session.read == NULL) { goto send_error; } session.write = buffer_create(NULL); if (session.write == NULL) { goto send_error; } rinoo_email_session_set(&email, &session); while (redo) { session.socket = rinoo_tcp_client(client_sched, &config->connection.ip, config->connection.port, config->connection.timeout * 1000); if (session.socket == NULL) { rinoo_log("Error: %s", strerror(errno)); config->stats.thread[rinoo_sched_self()->id].failed++; rsc_log(config, RSC_LOG_ERROR, "Couldn't create socket to %s:%d", config->connection.server, config->connection.port); goto send_error; } config->stats.thread[rinoo_sched_self()->id].sessions++; if (rinoo_smtp_start(&email) != 0) { goto send_error; } for (i = 0; i < config->session.nbmsg; i++) { if (rinoo_smtp_send(&email) != 0) { goto send_error; } config->stats.thread[rinoo_sched_self()->id].sent++; } if (rinoo_smtp_end(&email) != 0) { goto send_error; } rinoo_socket_destroy(session.socket); session.socket = NULL; config->stats.thread[rinoo_sched_self()->id].sessions--; if (config->mode == RSC_MODE_SECOND) { if (rinoo_task_wait(client_sched, 1000) != 0) { goto send_error; } } else if (config->mode != RSC_MODE_FLOOD) { redo = false; } } send_error: if (session.read != NULL) { buffer_destroy(session.read); } if (session.write != NULL) { buffer_destroy(session.write); } if (session.socket != NULL) { config->stats.thread[rinoo_sched_self()->id].sessions--; config->stats.thread[rinoo_sched_self()->id].failed++; rinoo_socket_destroy(session.socket); } if (__atomic_fetch_sub(&thread_counter, 1, __ATOMIC_SEQ_CST) == 1) { sched->stop = true; } }
void rsc_stat_aggregate(void *unused(arg)) { while (rinoo_task_wait(sched, 1000) == 0) { rsc_stats(); } }