Date: Mon, 4 Mar 2002 09:40:03 -0800 (PST) From: Sandeep Kumar <skumar@juniper.net> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/35214: dump program hangs while exiting Message-ID: <200203041740.g24He3x39561@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/35214; it has been noted by GNATS. From: Sandeep Kumar <skumar@juniper.net> To: freebsd-gnats-submit@FreeBSD.org, skumar@juniper.net Cc: Subject: Re: bin/35214: dump program hangs while exiting Date: Mon, 04 Mar 2002 09:30:39 -0800 Replacing setjmp/pause/longjmp with sigprocmask/sigsuspend fixes the problem. Here is the diff for tape.c Index: tape.c =================================================================== RCS file: /cvs/junos-2001/src/sbin/dump/tape.c,v retrieving revision 1.1.1.4 retrieving revision 1.2 diff -r1.1.1.4 -r1.2 60d59 < #include <setjmp.h> 124,127d122 < static int ready; /* have we reached the lock point without having */ < /* received the SIGUSR2 signal from the prev slave? */ < static jmp_buf jmpbuf; /* where to jump to if we are ready when the */ < /* SIGUSR2 arrives from the previous slave */ 682,684d676 < < if (ready) < longjmp(jmpbuf, 1); 757a750,755 > sigset_t sigusr2_mask, omask; > > /* Create a mask with SIGUSR2 */ > sigemptyset(&sigusr2_mask); > sigaddset(&sigusr2_mask, SIGUSR2); > 792,797c790,792 < if (setjmp(jmpbuf) == 0) { < ready = 1; < if (!caught) < (void) pause(); < } < ready = 0; --- > sigprocmask(SIG_BLOCK, &sigusr2_mask, &omask); /*Mask SIGUSR2*/; > if (!caught) > (void) sigsuspend(&omask); /* wait for SIGUSR2 */ 798a794 > sigprocmask(SIG_SETMASK, &omask, NULL); /* Set the old mask */ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200203041740.g24He3x39561>