diff --git a/gnu/local.mk b/gnu/local.mk index 295c83ee37..5c88240047 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -782,7 +782,6 @@ dist_patch_DATA = \ %D%/packages/patches/heimdal-CVE-2017-11103.patch \ %D%/packages/patches/hmmer-remove-cpu-specificity.patch \ %D%/packages/patches/higan-remove-march-native-flag.patch \ - %D%/packages/patches/htop-fix-process-tree.patch \ %D%/packages/patches/hubbub-sort-entities.patch \ %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch \ %D%/packages/patches/hydra-disable-darcs-test.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index d055b4bb50..d0cf8022d2 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -261,15 +261,14 @@ graphs and can export its output to different formats.") (define-public htop (package (name "htop") - (version "2.1.0") + (version "2.2.0") (source (origin (method url-fetch) (uri (string-append "http://hisham.hm/htop/releases/" version "/htop-" version ".tar.gz")) (sha256 (base32 - "0j07z0xm2gj1vzvbgh4323k4db9mr7drd7gw95mmpqi61ncvwq1j")) - (patches (search-patches "htop-fix-process-tree.patch")))) + "0mrwpb3cpn3ai7ar33m31yklj64c3pp576vh1naqff6f21pq5mnr")))) (build-system gnu-build-system) (inputs `(("ncurses" ,ncurses))) diff --git a/gnu/packages/patches/htop-fix-process-tree.patch b/gnu/packages/patches/htop-fix-process-tree.patch deleted file mode 100644 index d8e5e2ccac..0000000000 --- a/gnu/packages/patches/htop-fix-process-tree.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 2971a187551e062ffefdab965f55377b36cd94eb Mon Sep 17 00:00:00 2001 -From: Tobias Geerinckx-Rice -Date: Wed, 21 Feb 2018 06:00:50 +0100 -Subject: [PATCH] Fix process tree -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This manually reverts: - - commit 584a9bceab948590dabd189d234a86e6bf4ec3f4 - Author: wangqr - Date: Fri Sep 1 21:27:24 2017 +0800 - - Find roots when constructing process tree, fix #587 - -which breaks the process tree (‘t’) view in at least some cases. -I will investigate further... ---- - ProcessList.c | 63 +++++++++++++++++------------------------------------------ - 1 file changed, 18 insertions(+), 45 deletions(-) - -diff --git a/ProcessList.c b/ProcessList.c -index 48b2d95..225253d 100644 ---- a/ProcessList.c -+++ b/ProcessList.c -@@ -213,51 +213,24 @@ void ProcessList_sort(ProcessList* this) { - // Restore settings - this->settings->sortKey = sortKey; - this->settings->direction = direction; -- int vsize = Vector_size(this->processes); -- // Find all processes whose parent is not visible -- int size; -- while ((size = Vector_size(this->processes))) { -- int i; -- for (i = 0; i < size; i++) { -- Process* process = (Process*)(Vector_get(this->processes, i)); -- // Immediately consume not shown processes -- if (!process->show) { -- process = (Process*)(Vector_take(this->processes, i)); -- process->indent = 0; -- Vector_add(this->processes2, process); -- ProcessList_buildTree(this, process->pid, 0, 0, direction, false); -- break; -- } -- pid_t ppid = process->tgid == process->pid ? process->ppid : process->tgid; -- // Bisect the process vector to find parent -- int l = 0, r = size; -- // If PID corresponds with PPID (e.g. "kernel_task" (PID:0, PPID:0) -- // on Mac OS X 10.11.6) cancel bisecting and regard this process as -- // root. -- if (process->pid == ppid) -- r = 0; -- while (l < r) { -- int c = (l + r) / 2; -- pid_t pid = ((Process*)(Vector_get(this->processes, c)))->pid; -- if (ppid == pid) { -- break; -- } else if (ppid < pid) { -- r = c; -- } else { -- l = c + 1; -- } -- } -- // If parent not found, then construct the tree with this root -- if (l >= r) { -- process = (Process*)(Vector_take(this->processes, i)); -- process->indent = 0; -- Vector_add(this->processes2, process); -- ProcessList_buildTree(this, process->pid, 0, 0, direction, process->showChildren); -- break; -- } -- } -- // There should be no loop in the process tree -- assert(i < size); -+ -+ // Take PID 1 as root and add to the new listing -+ int vsize = Vector_size(this->processes); -+ Process* init = (Process*) (Vector_take(this->processes, 0)); -+ if (!init) return; -+ // This assertion crashes on hardened kernels. -+ // I wonder how well tree view works on those systems. -+ // assert(init->pid == 1); -+ init->indent = 0; -+ Vector_add(this->processes2, init); -+ // Recursively empty list -+ ProcessList_buildTree(this, init->pid, 0, 0, direction, true); -+ // Add leftovers -+ while (Vector_size(this->processes)) { -+ Process* p = (Process*) (Vector_take(this->processes, 0)); -+ p->indent = 0; -+ Vector_add(this->processes2, p); -+ ProcessList_buildTree(this, p->pid, 0, 0, direction, p->showChildren); - } - assert(Vector_size(this->processes2) == vsize); (void)vsize; - assert(Vector_size(this->processes) == 0); --- -2.16.2 -