Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Mar 2012 11:16:14 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r232599 - stable/8/contrib/top
Message-ID:  <201203061116.q26BGE8n036999@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Tue Mar  6 11:16:14 2012
New Revision: 232599
URL: http://svn.freebsd.org/changeset/base/232599

Log:
  MFC r232239:
  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.

Modified:
  stable/8/contrib/top/top.c
Directory Properties:
  stable/8/contrib/top/   (props changed)

Modified: stable/8/contrib/top/top.c
==============================================================================
--- stable/8/contrib/top/top.c	Tue Mar  6 11:05:50 2012	(r232598)
+++ stable/8/contrib/top/top.c	Tue Mar  6 11:16:14 2012	(r232599)
@@ -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 @@ restart:
 	    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; */
-}
-



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203061116.q26BGE8n036999>