NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[Signal handler] Bug or feature ?



        Hello,

I'm trying to fix a strange bug in a program that perfectly runs on various Unix including NetBSD 4.x (sparc). I have installed NetBSD 5.1.2 on an amd64 class server and I have found a strange behavior.

        A minimal example :

volatile int flag;

flag = 0;

do
{
        code_retour = nanosleep(&temporisation, &temporisation);
        erreur = errno;

        if (flag == 1)
        {
                exit(0);
        }
} while((code_retour == -1) && (erreur == EINTR));

SIGINT signal handler is :

void
interruption1(int signal)
{
        flag = 1;
        return;
}

When this process receives SIGINT, it doesn't exit. I have verified that signal handler is called and it is. But nanosleep() returns with EINTR error before signal handler is called. Thus, (flag == 1) expression may be false even if SIGINT is catched by process. And signal handler seems to run in a second thread (when process is built with libpthread).

Is there any solution to call (and return from) signal handler before returning from nanosleep() ?

        Best regards,

        JKB


Home | Main Index | Thread Index | Old Index