| Paste number 40932: | memcpy + signal handler interaction test case |
| Pasted by: | slava |
| 1 year, 3 months ago | |
| #macdev | Context in IRC logs | |
| Paste contents: |
| #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <strings.h> #include <sys/time.h> 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); } |
Annotations for this paste:
| Annotation number 1: | updated test case |
| Pasted by: | slava |
| 1 year, 3 months ago | |
| Context in IRC logs | |
| Paste contents: |
| #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <strings.h> #include <sys/time.h> 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("memset failed after %d iterations\n",iterations); int j; for(j = 0; j < N; j++) printf("%d\n",dst[j]); abort(); } } memcpy(dst,src,N * sizeof(int)); for(i = 0; i < N; i++) { if(dst[i] != i) { printf("memcpy failed after %d iterations\n",iterations); int j; for(j = 0; j < N; j++) printf("%d\n",dst[j]); abort(); } } } printf("Tests passed after %d iterations\n",iterations); } |
| Annotation number 2: | results for slava |
| Pasted by: | slyrus |
| 1 year, 3 months ago | |
| Context in IRC logs | |
| Paste contents: |
| memcpy failed after 36757157 iterations 0 1 0 3 Abort trap |
| Annotation number 3: | fix calloc call to not over-allocate |
| Pasted by: | slava |
| 1 year, 3 months ago | |
| Context in IRC logs | |
| Paste contents: |
| #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <strings.h> #include <sys/time.h> 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(N,sizeof(int)); int *dst = calloc(N,sizeof(int)); 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("memset failed after %d iterations\n",iterations); int j; for(j = 0; j < N; j++) printf("%d\n",dst[j]); abort(); } } memcpy(dst,src,N * sizeof(int)); for(i = 0; i < N; i++) { if(dst[i] != i) { printf("memcpy failed after %d iterations\n",iterations); int j; for(j = 0; j < N; j++) printf("%d\n",dst[j]); abort(); } } } printf("Tests passed after %d iterations\n",iterations); } |