$OpenBSD: patch-sysdeps_openbsd_procmap_c,v 1.6 2012/01/22 11:55:10 ajacoutot Exp $ From b11aa1517e203e36a8901f03ea57c50a25dfbfc7 Mon Sep 17 00:00:00 2001 From: Antoine Jacoutot <ajacoutot@gnome.org> Date: Sun, 22 Jan 2012 11:47:49 +0000 Subject: OpenBSD: kinfo_proc2 -> kinfo_proc commit 7bd52fc397be0598638abae2bf71740af505d29c Author: Jasper Lievisse Adriaanse <jasper@humppa.nl> Date: Sun Sep 18 13:41:20 2011 +0200 Extend comment a bit regarding processes dying before we get to kvm_getproc2() --- sysdeps/openbsd/procmap.c.orig Sun Jul 24 21:13:56 2011 +++ sysdeps/openbsd/procmap.c Mon Jan 9 18:37:24 2012 @@ -64,13 +64,17 @@ _glibtop_init_proc_map_p (glibtop *server) server->sysdeps.proc_map = _glibtop_sysdeps_proc_map; } -/* Provides detailed information about a process. */ +/* + * Provides detailed information about a process. + * Due to the fact we are only requested info about one process, it's possible + * the process has been reaped before we get to kvm_getprocs. Tough luck. + */ glibtop_map_entry * glibtop_get_proc_map_p (glibtop *server, glibtop_proc_map *buf, pid_t pid) { - struct kinfo_proc2 *pinfo; + struct kinfo_proc *pinfo; struct vm_map_entry entry, *first; struct vmspace vmspace; struct vnode vnode; @@ -91,7 +95,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_ glibtop_suid_enter (server); /* Get the process data */ - pinfo = kvm_getproc2 (server->machine.kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc2), &count); + pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc), &count); if ((pinfo == NULL) || (count < 1)) { glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid); return (glibtop_map_entry*) g_array_free(maps, TRUE); @@ -124,7 +128,8 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_ /* I tested this a few times with `mmap'; as soon as you write * to the mmap'ed area, the object type changes from OBJT_VNODE - * to OBJT_DEFAULT so it seems this really works. */ + * to OBJT_DEFAULT so it seems this really works. + */ do { glibtop_map_entry *mentry;