netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=a7d2a012583c65ca84c6a4cbf407f61d9e1791dd

commit a7d2a012583c65ca84c6a4cbf407f61d9e1791dd
Author: Alastair Poole <[email protected]>
Date:   Sat May 16 00:13:18 2020 +0100

    OpenBSD: Add TID and name also refactor.
---
 src/bin/system/process.c | 114 +++++++++++++++++++----------------------------
 1 file changed, 46 insertions(+), 68 deletions(-)

diff --git a/src/bin/system/process.c b/src/bin/system/process.c
index 8d7e463..8914b76 100644
--- a/src/bin/system/process.c
+++ b/src/bin/system/process.c
@@ -392,27 +392,12 @@ proc_info_by_pid(int pid)
 
 #if defined(__OpenBSD__)
 
-Proc_Info *
-proc_info_by_pid(int pid)
+static void
+_proc_get(Proc_Info *p, struct kinfo_proc *kp)
 {
-   struct kinfo_proc *kp, *kpt;
-   kvm_t *kern;
-   char **args;
-   char errbuf[_POSIX2_LINE_MAX];
-   char name[1024];
-   int count, pagesize, pid_count;
-
-   kern = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf);
-   if (!kern) return NULL;
-
-   kp = kvm_getprocs(kern, KERN_PROC_PID, pid, sizeof(*kp), &count);
-   if (!kp) return NULL;
-
-   if (count == 0) return NULL;
-   pagesize = getpagesize();
+   static int pagesize = 0;
 
-   Proc_Info *p = calloc(1, sizeof(Proc_Info));
-   if (!p) return NULL;
+   if (!pagesize) pagesize = getpagesize();
 
    p->pid = kp->p_pid;
    p->uid = kp->p_uid;
@@ -425,6 +410,14 @@ proc_info_by_pid(int pid)
    p->mem_shared = kp->p_uru_ixrss;
    p->priority = kp->p_priority - PZERO;
    p->nice = kp->p_nice - NZERO;
+   p->tid = kp->p_tid;
+}
+
+static void
+_cmd_get(Proc_Info *p, kvm_t *kern, struct kinfo_proc *kp)
+{
+   char **args;
+   char name[1024];
 
    if ((args = kvm_getargv(kern, kp, sizeof(name)-1)))
      {
@@ -444,6 +437,29 @@ proc_info_by_pid(int pid)
 
    if (!p->command)
      p->command = strdup(kp->p_comm);
+}
+
+Proc_Info *
+proc_info_by_pid(int pid)
+{
+   struct kinfo_proc *kp, *kpt;
+   kvm_t *kern;
+   char errbuf[_POSIX2_LINE_MAX];
+   int count, pid_count;
+
+   kern = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf);
+   if (!kern) return NULL;
+
+   kp = kvm_getprocs(kern, KERN_PROC_PID, pid, sizeof(*kp), &count);
+   if (!kp) return NULL;
+
+   if (count == 0) return NULL;
+
+   Proc_Info *p = calloc(1, sizeof(Proc_Info));
+   if (!p) return NULL;
+
+   _proc_get(p, kp);
+   _cmd_get(p, kern, kp);
 
    kp = kvm_getprocs(kern, KERN_PROC_SHOW_THREADS, 0, sizeof(*kp), &pid_count);
 
@@ -452,30 +468,22 @@ proc_info_by_pid(int pid)
         if (kp[i].p_pid != p->pid) continue;
 
         kpt = &kp[i];
-        p->numthreads++;
+
+        if (kpt->p_tid <= 0) continue;
 
         Proc_Info *t = calloc(1, sizeof(Proc_Info));
         if (!t) continue;
 
-        t->pid = kpt->p_pid;
-        t->uid = kpt->p_uid;
-        t->cpu_id = kpt->p_cpuid;
-        t->state = _process_state_name(kpt->p_stat);
-        t->cpu_time = kpt->p_uticks + kpt->p_sticks + kpt->p_iticks;
-        t->mem_virt = p->mem_size = (kpt->p_vm_tsize * pagesize) +
-           (kpt->p_vm_dsize * pagesize) + (kpt->p_vm_ssize * pagesize);
-        t->mem_rss = kpt->p_vm_rssize * pagesize;
-        t->mem_shared = kpt->p_uru_ixrss;
-        t->priority = kpt->p_priority - PZERO;
-        t->nice = kpt->p_nice - NZERO;
-
-        int tid = kpt->p_tid;
-        if (tid < 0) tid = 0;
-        t->command = strdup(eina_slstr_printf("%s:%d", kpt->p_comm, tid));
+        _proc_get(t, kpt);
+
+        t->tid = kpt->p_tid;
+        t->thread_name = strdup(kpt->p_comm);
 
         p->threads = eina_list_append(p->threads, t);
      }
 
+   p->numthreads = eina_list_count(p->threads);
+
    kvm_close(kern);
 
    return p;
@@ -486,11 +494,9 @@ _process_list_openbsd_get(void)
 {
    struct kinfo_proc *kps, *kp;
    Proc_Info *p;
-   char **args;
    char errbuf[4096];
-   char name[1024];
    kvm_t *kern;
-   int pid_count, pagesize;
+   int pid_count;
    Eina_List *list = NULL;
 
    kern = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf);
@@ -499,43 +505,15 @@ _process_list_openbsd_get(void)
    kps = kvm_getprocs(kern, KERN_PROC_ALL, 0, sizeof(*kps), &pid_count);
    if (!kps) return NULL;
 
-   pagesize = getpagesize();
-
    for (int i = 0; i < pid_count; i++)
      {
         p = calloc(1, sizeof(Proc_Info));
         if (!p) return NULL;
 
         kp = &kps[i];
-        p->pid = kp->p_pid;
-        p->uid = kp->p_uid;
-        p->cpu_id = kp->p_cpuid;
-        p->state = _process_state_name(kp->p_stat);
-        p->cpu_time = kp->p_uticks + kp->p_sticks + kp->p_iticks;
-        p->mem_size = p->mem_virt = (kp->p_vm_tsize * pagesize) +
-           (kp->p_vm_dsize * pagesize) + (kp->p_vm_ssize * pagesize);
-        p->mem_rss = kp->p_vm_rssize * pagesize;
-        p->mem_shared = kp->p_uru_ixrss;
-        p->priority = kp->p_priority - PZERO;
-        p->nice = kp->p_nice - NZERO;
-
-        if ((args = kvm_getargv(kern, kp, sizeof(name)-1)))
-          {
-             Eina_Strbuf *buf = eina_strbuf_new();
-             for (int i = 0; args[i]; i++)
-               {
-                  eina_strbuf_append(buf, args[i]);
-                  if (args[i + 1])
-                    eina_strbuf_append(buf, " ");
-               }
-             p->arguments = eina_strbuf_string_steal(buf);
-             eina_strbuf_free(buf);
 
-             if (args[0] && ecore_file_exists(args[0]))
-                p->command = strdup(ecore_file_file_get(args[0]));
-          }
-        if (!p->command)
-          p->command = strdup(kp->p_comm);
+        _proc_get(p, kp);
+        _cmd_get(p, kern, kp);
 
         list = eina_list_append(list, p);
      }

-- 


Reply via email to