diff --git a/sysdeps/freebsd/ChangeLog b/sysdeps/freebsd/ChangeLog index 12d51120..4f928f65 100644 --- a/sysdeps/freebsd/ChangeLog +++ b/sysdeps/freebsd/ChangeLog @@ -1,3 +1,8 @@ +1998-11-11 Martin Baulig + + * *.c: It does not work to get information about the swapper task + on FreeBSD 2.2.6, so we simple return if pid == 0. + 1998-10-31 Martin Baulig * *.c: Use glibtop_warn_io_r () instead of glibtop_error_io_r (). diff --git a/sysdeps/freebsd/procargs.c b/sysdeps/freebsd/procargs.c index 622adff1..542885d9 100644 --- a/sysdeps/freebsd/procargs.c +++ b/sysdeps/freebsd/procargs.c @@ -59,20 +59,26 @@ glibtop_get_proc_args_p (glibtop *server, glibtop_proc_args *buf, memset (buf, 0, sizeof (glibtop_proc_args)); + /* swapper, init, pagedaemon, vmdaemon, update - this doen't work. */ + if (pid < 5) return NULL; + sprintf (filename, "/proc/%d/mem", pid); if (stat (filename, &statb)) return NULL; + glibtop_suid_enter (server); + /* Get the process data */ pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); - if ((pinfo == NULL) || (count < 1)) - glibtop_error_io_r (server, "kvm_getprocs (proc_args)"); - - glibtop_suid_enter (server); + if ((pinfo == NULL) || (count < 1)) { + glibtop_suid_leave (server); + glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid); + return NULL; + } args = kvm_getargv (server->machine.kd, pinfo, max_len); if (args == NULL) { - glibtop_warn_io_r (server, "kvm_getargv"); glibtop_suid_leave (server); + glibtop_warn_io_r (server, "kvm_getargv (%d)", pid); return NULL; } diff --git a/sysdeps/freebsd/prockernel.c b/sysdeps/freebsd/prockernel.c index c0bce59f..0918ba07 100644 --- a/sysdeps/freebsd/prockernel.c +++ b/sysdeps/freebsd/prockernel.c @@ -81,6 +81,9 @@ glibtop_get_proc_kernel_p (glibtop *server, if (server->sysdeps.proc_time == 0) return; + /* It does not work for the swapper task. */ + if (pid == 0) return; + /* Get the process information */ pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); if ((pinfo == NULL) || (count != 1)) diff --git a/sysdeps/freebsd/procmap.c b/sysdeps/freebsd/procmap.c index eb916b07..784789f1 100644 --- a/sysdeps/freebsd/procmap.c +++ b/sysdeps/freebsd/procmap.c @@ -78,12 +78,19 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf, int count, i = 0; int update = 0; + glibtop_init_p (server, (1 << GLIBTOP_SYSDEPS_PROC_MAP), 0); + + memset (buf, 0, sizeof (glibtop_proc_map)); + + /* It does not work for the swapper task. */ + if (pid == 0) return NULL; + glibtop_suid_enter (server); /* Get the process data */ pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); if ((pinfo == NULL) || (count < 1)) - glibtop_error_io_r (server, "kvm_getprocs (proclist)"); + glibtop_error_io_r (server, "kvm_getprocs (%d)", pid); /* Now we get the memory maps. */ diff --git a/sysdeps/freebsd/procmem.c b/sysdeps/freebsd/procmem.c index 7b8cddd9..8679ccb2 100644 --- a/sysdeps/freebsd/procmem.c +++ b/sysdeps/freebsd/procmem.c @@ -101,10 +101,13 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf, if (server->sysdeps.proc_mem == 0) return; + /* It does not work for the swapper task. */ + if (pid == 0) return; + /* Get the process data */ pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); if ((pinfo == NULL) || (count < 1)) { - glibtop_warn_io_r (server, "kvm_getprocs (proclist)"); + glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid); return; } diff --git a/sysdeps/freebsd/procsignal.c b/sysdeps/freebsd/procsignal.c index f436de0f..6063a44d 100644 --- a/sysdeps/freebsd/procsignal.c +++ b/sysdeps/freebsd/procsignal.c @@ -51,6 +51,9 @@ glibtop_get_proc_signal_p (glibtop *server, memset (buf, 0, sizeof (glibtop_proc_signal)); + /* It does not work for the swapper task. */ + if (pid == 0) return; + /* Get the process information */ pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); if ((pinfo == NULL) || (count != 1)) { diff --git a/sysdeps/freebsd/procstate.c b/sysdeps/freebsd/procstate.c index bfe116a2..3615f3d7 100644 --- a/sysdeps/freebsd/procstate.c +++ b/sysdeps/freebsd/procstate.c @@ -53,6 +53,9 @@ glibtop_get_proc_state_p (glibtop *server, memset (buf, 0, sizeof (glibtop_proc_state)); + /* It does not work for the swapper task. */ + if (pid == 0) return; + /* Get the process information */ pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); if ((pinfo == NULL) || (count != 1)) { diff --git a/sysdeps/freebsd/proctime.c b/sysdeps/freebsd/proctime.c index 200508ab..3f941edf 100644 --- a/sysdeps/freebsd/proctime.c +++ b/sysdeps/freebsd/proctime.c @@ -117,6 +117,9 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf, if (server->sysdeps.proc_time == 0) return; + /* It does not work for the swapper task. */ + if (pid == 0) return; + sprintf (filename, "/proc/%d/mem", pid); if (stat (filename, &statb)) return; diff --git a/sysdeps/freebsd/procuid.c b/sysdeps/freebsd/procuid.c index 3041693f..32bbae44 100644 --- a/sysdeps/freebsd/procuid.c +++ b/sysdeps/freebsd/procuid.c @@ -53,6 +53,9 @@ glibtop_get_proc_uid_p (glibtop *server, glibtop_proc_uid *buf, memset (buf, 0, sizeof (glibtop_proc_uid)); + /* It does not work for the swapper task. */ + if (pid == 0) return; + /* Get the process information */ pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); if ((pinfo == NULL) || (count != 1)) {