Don't call calcru() on a swapped-out process. calcru() access p_stats, which

is in U-area.
This commit is contained in:
Dmitrij Tejblum 1999-05-22 20:10:31 +00:00
parent 53ee42d318
commit 9d3a442583
3 changed files with 31 additions and 40 deletions

View file

@ -37,7 +37,7 @@
* @(#)procfs_status.c 8.4 (Berkeley) 6/15/94
*
* From:
* $Id: procfs_status.c,v 1.12 1999/01/05 03:53:06 peter Exp $
* $Id: procfs_status.c,v 1.13 1999/04/28 11:37:20 phk Exp $
*/
#include <sys/param.h>
@ -102,23 +102,17 @@ procfs_dostatus(curp, p, pfs, uio)
if (*sep != ',')
ps += sprintf(ps, "noflags");
if (p->p_flag & P_INMEM)
ps += sprintf(ps, " %ld,%ld",
p->p_stats->p_start.tv_sec,
p->p_stats->p_start.tv_usec);
else
ps += sprintf(ps, " -1,-1");
{
if (p->p_flag & P_INMEM) {
struct timeval ut, st;
calcru(p, &ut, &st, (void *) 0);
ps += sprintf(ps, " %ld,%ld %ld,%ld",
ut.tv_sec,
ut.tv_usec,
st.tv_sec,
st.tv_usec);
}
calcru(p, &ut, &st, (struct timeval *) NULL);
ps += sprintf(ps, " %ld,%ld %ld,%ld %ld,%ld",
p->p_stats->p_start.tv_sec,
p->p_stats->p_start.tv_usec,
ut.tv_sec, ut.tv_usec,
st.tv_sec, st.tv_usec);
} else
ps += sprintf(ps, " -1,-1 -1,-1 -1,-1");
ps += sprintf(ps, " %s",
(p->p_wchan && p->p_wmesg) ? p->p_wmesg : "nochan");

View file

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)tty.c 8.8 (Berkeley) 1/21/94
* $Id: tty.c,v 1.117 1999/05/06 18:12:47 peter Exp $
* $Id: tty.c,v 1.118 1999/05/08 06:39:42 phk Exp $
*/
/*-
@ -2260,15 +2260,18 @@ ttyinfo(tp)
pick->p_stat == SRUN ? "running" :
pick->p_wmesg ? pick->p_wmesg : "iowait");
calcru(pick, &utime, &stime, NULL);
if (pick->p_flag & P_INMEM) {
calcru(pick, &utime, &stime, NULL);
/* Print user time. */
ttyprintf(tp, "%ld.%02ldu ",
utime.tv_sec, utime.tv_usec / 10000);
/* Print user time. */
ttyprintf(tp, "%ld.%02ldu ",
utime.tv_sec, utime.tv_usec / 10000);
/* Print system time. */
ttyprintf(tp, "%ld.%02lds ",
stime.tv_sec, stime.tv_usec / 10000);
/* Print system time. */
ttyprintf(tp, "%ld.%02lds ",
stime.tv_sec, stime.tv_usec / 10000);
} else
ttyprintf(tp, "?.??u ?.??s ");
/* Print percentage cpu, resident set size. */
tmp = (pick->p_pctcpu * 10000 + FSCALE / 2) >> FSHIFT;

View file

@ -37,7 +37,7 @@
* @(#)procfs_status.c 8.4 (Berkeley) 6/15/94
*
* From:
* $Id: procfs_status.c,v 1.12 1999/01/05 03:53:06 peter Exp $
* $Id: procfs_status.c,v 1.13 1999/04/28 11:37:20 phk Exp $
*/
#include <sys/param.h>
@ -102,23 +102,17 @@ procfs_dostatus(curp, p, pfs, uio)
if (*sep != ',')
ps += sprintf(ps, "noflags");
if (p->p_flag & P_INMEM)
ps += sprintf(ps, " %ld,%ld",
p->p_stats->p_start.tv_sec,
p->p_stats->p_start.tv_usec);
else
ps += sprintf(ps, " -1,-1");
{
if (p->p_flag & P_INMEM) {
struct timeval ut, st;
calcru(p, &ut, &st, (void *) 0);
ps += sprintf(ps, " %ld,%ld %ld,%ld",
ut.tv_sec,
ut.tv_usec,
st.tv_sec,
st.tv_usec);
}
calcru(p, &ut, &st, (struct timeval *) NULL);
ps += sprintf(ps, " %ld,%ld %ld,%ld %ld,%ld",
p->p_stats->p_start.tv_sec,
p->p_stats->p_start.tv_usec,
ut.tv_sec, ut.tv_usec,
st.tv_sec, st.tv_usec);
} else
ps += sprintf(ps, " -1,-1 -1,-1 -1,-1");
ps += sprintf(ps, " %s",
(p->p_wchan && p->p_wmesg) ? p->p_wmesg : "nochan");