Paste number 40932: memcpy + signal handler interaction test case

Index of paste annotations: 1 | 2 | 3

Paste number 40932: memcpy + signal handler interaction test case
Pasted by: slava
1 year, 3 months ago
#macdev | Context in IRC logs
Paste contents:
Raw Source | XML | Display As
#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:
Raw Source | Display As
#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:
Raw Source | Display As
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:
Raw Source | Display As
#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);
}

Colorize as:
Show Line Numbers
Index of paste annotations: 1 | 2 | 3

Ads absolutely not by Google

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.