Fix a race in top non-interactive mode. Use plain sleep(3) call instead
of arming timer and then pausing. If SIGALRM is delivered before pause(3) is entered, top hangs. Submitted by: Andrey Zonov <andrey zonov org> MFC after: 1 week
This commit is contained in:
parent
64ae02c365
commit
963a74f13c
@ -70,7 +70,6 @@ int pcpu_stats = No;
|
||||
|
||||
/* signal handling routines */
|
||||
sigret_t leave();
|
||||
sigret_t onalrm();
|
||||
sigret_t tstop();
|
||||
#ifdef SIGWINCH
|
||||
sigret_t winch();
|
||||
@ -723,12 +722,7 @@ char *argv[];
|
||||
no_command = Yes;
|
||||
if (!interactive)
|
||||
{
|
||||
/* set up alarm */
|
||||
(void) signal(SIGALRM, onalrm);
|
||||
(void) alarm((unsigned)delay);
|
||||
|
||||
/* wait for the rest of it .... */
|
||||
pause();
|
||||
sleep(delay);
|
||||
}
|
||||
else while (no_command)
|
||||
{
|
||||
@ -1174,11 +1168,3 @@ int status;
|
||||
exit(status);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
sigret_t onalrm() /* SIGALRM handler */
|
||||
|
||||
{
|
||||
/* this is only used in batch mode to break out of the pause() */
|
||||
/* return; */
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user