From 786bffc25399e2b64d2a5ad2203faf71b9bfaac3 Mon Sep 17 00:00:00 2001 From: Jim Warner <james.warner@comcast.net> Date: Tue, 17 Jul 2018 00:00:00 -0500 Subject: [PATCH] top: fix the collapsed children cpu segmentation fault While that 'Hide_cpu' value will always be zero unless there are collapsed children, the damn array will only be present when a window's in 'Show_FOREST' view mode. Reference(s): https://www.freelists.org/post/procps/important-improvements-to-top,8 Signed-off-by: Jim Warner <james.warner@comcast.net> --- top/top.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/top/top.c b/top/top.c index 1d664467..49c44e60 100644 --- a/top/top.c +++ b/top/top.c @@ -4692,7 +4692,7 @@ static int Tree_idx; // frame_make resets to zero static int *Hide_pid; // collapsible process array static int Hide_tot; // total used in above array #ifndef TREE_VCPUOFF -static int *Hide_cpu; // accum tics from collapsed +static unsigned *Hide_cpu; // accum tics from collapsed #endif /* @@ -4749,7 +4749,7 @@ static void forest_create (WIN_t *q) { Tree_ppt = alloc_r(Tree_ppt, sizeof(proc_t*) * hwmsav); Hide_pid = alloc_r(Hide_pid, sizeof(int) * hwmsav); #ifndef TREE_VCPUOFF - Hide_cpu = alloc_r(Hide_cpu, sizeof(int) * hwmsav); + Hide_cpu = alloc_r(Hide_cpu, sizeof(unsigned) * hwmsav); #endif } @@ -4761,7 +4761,7 @@ static void forest_create (WIN_t *q) { forest_adds(i, 0); // add a parent and its children } #ifndef TREE_VCPUOFF - memset(Hide_cpu, 0, sizeof(int) * Frame_maxtask); + memset(Hide_cpu, 0, sizeof(unsigned) * Frame_maxtask); #endif /* we're borrowing some pad bytes in the proc_t, pad_2: 'x' means a collapsed thread, 'z' means an unseen child @@ -6002,7 +6002,7 @@ static const char *task_show (const WIN_t *q, const int idx) { { float u = (float)p->pcpu; #ifndef TREE_VCPUOFF // Hide_cpu entry is always zero, unless we're a collapsed parent - u += Hide_cpu[idx]; + if (CHKw(q, Show_FOREST)) u += Hide_cpu[idx]; u *= Frame_etscale; if (p->pad_2 != 'x' && u > 100.0 * p->nlwp) u = 100.0 * p->nlwp; #else -- 2.40.0