In message <[EMAIL PROTECTED]>, Bruce Evans writes:
>
>I don't know how open() of a disk device can be interrupted by a signal
>in practice.  Most disk operations don't check for signals.

Does the PCATCH tsleep in diskopen() that I mentioned seem a likely
candidate? Anyway, below is a simple program that reproduces the
EINTR error fairly reliably for me when run on disk devices.

Ian

#include <sys/types.h>
#include <err.h>
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>

void
handler(int sig) {
}

int
main(int argc, char **argv)
{
        int fd, i;
        if (argc < 2)
                errx(1, "Usage: %s device", argv[0]);
        fork();
        fork();
        fork();
        fork();

        signal(SIGUSR1, handler);
        sleep(1);

        for (i = 0; i < 200; i++) {
                killpg(0, SIGUSR1);
                if ((fd = open(argv[1], O_RDONLY)) < 0)
                        err(1, "%s", argv[1]);
                close(fd);
        }
        return 0;
}

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to