#include #include #include #include #include void dummy_signal_handler(int signal, siginfo_t *siginfo, void *uap) { /* no-op */ } void init_signal_handler(void) { struct sigaction profile_sigaction; memset(&profile_sigaction,0,sizeof(struct sigaction)); sigemptyset(&profile_sigaction.sa_mask); profile_sigaction.sa_sigaction = dummy_signal_handler; profile_sigaction.sa_flags = SA_SIGINFO; sigaction(SIGALRM,&profile_sigaction,NULL); } void init_interval_timer(void) { struct itimerval timerval; timerval.it_interval.tv_sec = 0; timerval.it_interval.tv_usec = 10 * 1000; timerval.it_value = timerval.it_interval; setitimer(ITIMER_REAL,&timerval,NULL); } static int N; int main(int argc, char **argv) { N = 4; int *src = calloc(20,N); int *dst = calloc(20,N); int i; for(i = 0; i < N; i++) src[i] = i; init_signal_handler(); init_interval_timer(); int iterations; #define MAX_ITERATIONS 100000000 for(iterations = 0; iterations < MAX_ITERATIONS; iterations++) { memset(dst,0,N * sizeof(int)); for(i = 0; i < N; i++) { if(dst[i] != 0) { printf("Test failed after %d iterations\n",iterations); abort(); } } memcpy(dst,src,N * sizeof(int)); for(i = 0; i < N; i++) { if(dst[i] != i) { printf("Test failed after %d iterations\n",iterations); abort(); } } } printf("Tests passed after %d iterations\n",iterations); }