diff options
| author | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-17 01:34:34 -0300 |
|---|---|---|
| committer | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-17 01:34:34 -0300 |
| commit | 88d82c6eaee88398af1de57cddca692a1f74b087 (patch) | |
| tree | df492c2002a1820959703f4f481172cceafeb0a1 /tinycc/tests/tests2/114_bound_signal.c | |
| parent | 111c133b939c15c57c90cd474d55e84928c6307a (diff) | |
Cleanup feels good! Big work coming up this week.
Diffstat (limited to 'tinycc/tests/tests2/114_bound_signal.c')
| -rw-r--r-- | tinycc/tests/tests2/114_bound_signal.c | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/tinycc/tests/tests2/114_bound_signal.c b/tinycc/tests/tests2/114_bound_signal.c deleted file mode 100644 index d11b146..0000000 --- a/tinycc/tests/tests2/114_bound_signal.c +++ /dev/null @@ -1,143 +0,0 @@ -#include <stdio.h> -#include <pthread.h> -#include <semaphore.h> -#include <signal.h> -#include <string.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> -#include <stdlib.h> -#include <errno.h> -#include <setjmp.h> - -static volatile int run = 1; -static sem_t sem; -static sem_t sem_child; - -static void -add (int n) -{ - int i; - int arr[n]; - - for (i = 0; i < n; i++) { - arr[i]++; - } - memset (&arr[0], 0, n * sizeof(int)); -} - -static void * -high_load (void *unused) -{ - while (run) { - add(10); - add(20); - } - return NULL; -} - -static void * -do_signal (void *unused) -{ - while (run) { - kill (getpid(), SIGUSR1); - while (sem_wait(&sem) < 0 && errno == EINTR); - } - return NULL; -} - -static void * -do_fork (void *unused) -{ - pid_t pid; - - while (run) { - switch ((pid = fork())) { - case 0: - add(1000); - add(2000); - exit(0); - break; - case -1: - return NULL; - default: - while (sem_wait(&sem_child) < 0 && errno == EINTR); - wait(NULL); - break; - } - } - return NULL; -} - -static void signal_handler(int sig) -{ - add(10); - add(20); - sem_post (&sem); -} - -static void child_handler(int sig) -{ - add(10); - add(20); - sem_post (&sem_child); -} - -int -main (void) -{ - int i; - pthread_t id1, id2, id3; - struct sigaction act; - sigjmp_buf sj; - sigset_t m; - time_t end; - - memset (&act, 0, sizeof (act)); - act.sa_handler = signal_handler; - act.sa_flags = 0; - sigemptyset (&act.sa_mask); - sigaction (SIGUSR1, &act, NULL); - act.sa_handler = child_handler; - sigaction (SIGCHLD, &act, NULL); - - printf ("start\n"); fflush(stdout); - - sem_init (&sem, 0, 0); - sem_init (&sem_child, 0, 0); - pthread_create(&id1, NULL, high_load, NULL); - pthread_create(&id2, NULL, do_signal, NULL); -#if !defined(__APPLE__) - pthread_create(&id3, NULL, do_fork, NULL); -#endif - - /* sleep does not work !!! */ - end = time(NULL) + 2; - while (time(NULL) < end) ; - run = 0; - - pthread_join(id1, NULL); - pthread_join(id2, NULL); -#if !defined(__APPLE__) - pthread_join(id3, NULL); -#endif - sem_destroy (&sem); - sem_destroy (&sem_child); - - printf ("end\n"); fflush(stdout); - - sigemptyset (&m); - sigprocmask (SIG_SETMASK, &m, NULL); - if (sigsetjmp (sj, 0) == 0) - { - sigaddset (&m, SIGUSR1); - sigprocmask (SIG_SETMASK, &m, NULL); - siglongjmp (sj, 1); - printf ("failed"); - return 1; - } - sigprocmask (SIG_SETMASK, NULL, &m); - if (!sigismember (&m, SIGUSR1)) - printf ("failed"); - return 0; -} |
