--- libaitsched/example/test.c 2014/06/03 20:39:54 1.13.16.3 +++ libaitsched/example/test.c 2026/05/19 15:47:47 1.15.22.1 @@ -15,6 +15,7 @@ intptr_t Kill[1]; #ifdef AIO_SUPPORT struct iovec iv[3], wiv[3], riv[3]; #endif +volatile uint64_t total; void *event(sched_task_t *arg) { @@ -136,11 +137,49 @@ void sig(int s) { switch (s) { case SIGTERM: + case SIGINT: + printf("I'm in switch case %d\n", s); Kill[0]++; break; + case SIGHUP: + printf("Test SIGHUP\n"); + break; } } +void *sigt(sched_task_t *arg) +{ + int s = TASK_VAL(arg); + + printf("Received signal #%d\n", s); + + sig(s); + + schedSignalSelf(arg); + taskExit(arg, NULL); +} + +static void* +prof(void *task, void *stage) +{ + sched_task_t *t = task; + struct timespec ts; + static volatile uint64_t ns; + + clock_gettime(CLOCK_MONOTONIC, &ts); + if (!stage) + ns = (uint64_t) ts.tv_sec * 1000000000LL + ts.tv_nsec; + else { + ns = (uint64_t) ts.tv_sec * 1000000000LL + ts.tv_nsec - ns; + printf("Task ran for %lu ns: id=%p type=%d call=%p -> #%ld\n", ns, + TASK_ID(t), TASK_TYPE(t), TASK_FUNC(t), TASK_RET(t)); + + total += ns; + } + + return NULL; +} + int main(int argc, char **argv) { @@ -148,17 +187,19 @@ main(int argc, char **argv) int f, fd; struct sockaddr_in sin; struct timespec ts = { 20, 0 }; -// struct timespec p = { 0, 10000000 }; - struct sigaction sa; + struct timespec p = { 0, 10000000 }; +// struct sigaction sa; sched_task_t *t; #ifdef AIO_SUPPORT char *ole = malloc(BUFSIZ); register int i; #endif + /* sa.sa_handler = sig; sigemptyset(&sa.sa_mask); sigaction(SIGTERM, &sa, NULL); + */ f = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (f == -1) @@ -183,6 +224,9 @@ main(int argc, char **argv) return 1; } + if (argc > 1) + ROOT_PROFILING(root, prof); + if (!schedTimer(root, timer, (void*) (intptr_t) ts.tv_sec, ts, NULL, 0)) { printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError()); return 4; @@ -295,8 +339,15 @@ main(int argc, char **argv) schedCallOnce(root, once, "000000", 42, NULL, 0); -// schedPolling(root, &p, NULL); + printf("add signals\n"); + schedSignal(root, sigt, NULL, SIGHUP, NULL, 0); + schedSignal(root, sigt, NULL, SIGTERM, NULL, 0); + schedSignal(root, sigt, NULL, SIGINT, NULL, 0); + + schedPolling(root, &p, NULL); + schedSignalDispatch(root, 42); schedRun(root, Kill); + schedSignalDispatch(root, 0); schedEnd(&root); sleep(1); @@ -307,5 +358,8 @@ main(int argc, char **argv) close(fd); close(f); + + if (argc > 1) + printf("Total spend of time for all tasks = %lu\n", total); return 0; }