On Sun, Mar 10, 2002 at 10:08:02PM +0100, Oskar Liljeblad wrote:
> The code snipper demonstrates what I consider a bug in the
> dnotify facilities in the kernel. After a fork, all registered
> notifications are lost in the process where they originally
> where registered (the parent process). "lost" here means that
> the signal specified with F_SETSIG fcntl no longer is delivered
> when notified.
>
> How to reproduce (tested with 2.4.17):
> gcc -o dnoticebug dnoticebug.c
> dnoticebug & # run in background
> cat dnoticebug.c >/dev/null # "notified" should now be printed
> cat dnoticebug.c >/dev/null # nothing is printed this time
>
> If you comment out the line with fork below, "notified" *will* be
> printed every time you cat dnoticebug.c.
>
> I'm not subscribed to the list so I'd appreciate if you CCed me.
> (Otherwise I'd have to use the archives :) Thanks.
>
> Oskar Liljeblad (oskar@osk.mine.nu)
>
> ===
>
> #define _GNU_SOURCE
> #include <fcntl.h>
> #include <signal.h>
> #include <stdio.h>
> #include <unistd.h>
>
> static void handler(int sig, siginfo_t *si, void *data)
> {
> printf("notified\n");
> }
>
> int main(void)
> {
> struct sigaction act;
> int fd;
>
> act.sa_sigaction = handler;
> sigemptyset(&act.sa_mask);
> act.sa_flags = SA_SIGINFO;
> sigaction(SIGRTMIN, &act, NULL);
>
> fd = open(".", O_RDONLY);
> fcntl(fd, F_SETSIG, SIGRTMIN);
> fcntl(fd, F_NOTIFY, DN_ACCESS|DN_MULTISHOT);
>
> while (1) {
> pause();
> if (fork() <= 0) exit(0);
> wait(NULL);
> }
> }
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/