Monday, March 29, 2021

Re: htop update, including threads display

On Mon, Mar 29, 2021 at 01:50:54PM +0100, Stuart Henderson wrote:
> On 2021/03/27 13:42, Stuart Henderson wrote:
> > This updates htop to git head, support for displaying threads on OpenBSD
> > was recently merged upstream. Usual rebasing needed for the NCPUONLINE
> > patches, I have tidied them up a bit and opened a pull request upstream
> > for those. Other patches seem to not be needed (and many of them no
> > longer apply due to upstream work).
> >
> > OK?
> >
> > Ian, do you want to stay maintainer for this? (there have been a few
> > maintainer timeout commits on recent updates to this port)
>
> as pointed out by cgzones on the upstream PR, the cpuIndex array is not
> needed; now we are down to just 1 patch

I don't use htop, but as the release is approaching and it's fairly
popular, I believe this should go in and be tested rather than
potentially sitting in your tree and on this list for a week.

ok tb

>
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/sysutils/htop/Makefile,v
> retrieving revision 1.25
> diff -u -p -r1.25 Makefile
> --- Makefile 8 Dec 2020 16:23:17 -0000 1.25
> +++ Makefile 29 Mar 2021 12:50:14 -0000
> @@ -4,7 +4,9 @@ COMMENT = interactive process viewer
>
> GH_ACCOUNT = htop-dev
> GH_PROJECT = htop
> -GH_TAGNAME = 3.0.2
> +#GH_TAGNAME = 3.0.5
> +GH_COMMIT = 272e72680b84a52183d39a519d6704324063bae1
> +DISTNAME = htop-3.0.5pl20210325
>
> CATEGORIES = sysutils
>
> @@ -12,7 +14,7 @@ HOMEPAGE = https://htop.dev
>
> MAINTAINER = Ian Sutton <ian@ce.gl>
>
> -# GPLv2+
> +# GPLv2 only
> PERMIT_PACKAGE = Yes
>
> WANTLIB = c curses kvm m
> @@ -21,6 +23,8 @@ RUN_DEPENDS = devel/desktop-file-utils
>
> NO_TEST = Yes
>
> +DEBUG_PACKAGES = ${BUILD_PACKAEGS}
> +
> CONFIGURE_STYLE = autoreconf
> AUTOCONF_VERSION = 2.69
> AUTOMAKE_VERSION = 1.16
> @@ -28,9 +32,7 @@ AUTORECONF = ./autogen.sh
> CONFIGURE_ARGS += --disable-unicode \
> --disable-taskstats
>
> -# htop has some bugs which take hours or days to reach.
> -# Keep the symbols to give a chance to the user to get an useful coredump.
> -MAKE_FLAGS = AM_CPPFLAGS="-DDEBUG"
> -DEBUG = -g
> +post-install:
> + rm -r ${PREFIX}/share/icons/
>
> .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/sysutils/htop/distinfo,v
> retrieving revision 1.6
> diff -u -p -r1.6 distinfo
> --- distinfo 8 Dec 2020 16:23:17 -0000 1.6
> +++ distinfo 29 Mar 2021 12:50:14 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (htop-3.0.2.tar.gz) = tHRKO+onnyo3Je2OXjX/2csQ1mZzvwfI/iH+s8RmEwU=
> -SIZE (htop-3.0.2.tar.gz) = 176132
> +SHA256 (htop-3.0.5pl20210325-272e7268.tar.gz) = vGQLe5GzuNBe8HVGjndJAvR5yrSCIA4gu24jaQgt7Rk=
> +SIZE (htop-3.0.5pl20210325-272e7268.tar.gz) = 313192
> Index: patches/patch-CPUMeter_c
> ===================================================================
> RCS file: patches/patch-CPUMeter_c
> diff -N patches/patch-CPUMeter_c
> --- patches/patch-CPUMeter_c 8 Dec 2020 16:23:17 -0000 1.8
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,16 +0,0 @@
> -$OpenBSD: patch-CPUMeter_c,v 1.8 2020/12/08 16:23:17 sthen Exp $
> -
> -Index: CPUMeter.c
> ---- CPUMeter.c.orig
> -+++ CPUMeter.c
> -@@ -202,6 +202,10 @@ static void SingleColCPUsMeter_draw(Meter* this, int x
> - int start, count;
> - AllCPUsMeter_getRange(this, &start, &count);
> - for (int i = 0; i < count; i++) {
> -+ if(meters[i]->draw == 0x1) {
> -+ AllCPUsMeter_init(meters[i]);
> -+ meters[i]->draw = Meter_modes[meters[i]->mode]->draw;
> -+ }
> - meters[i]->draw(meters[i], x, y, w);
> - y += meters[i]->h;
> - }
> Index: patches/patch-FunctionBar_c
> ===================================================================
> RCS file: patches/patch-FunctionBar_c
> diff -N patches/patch-FunctionBar_c
> --- patches/patch-FunctionBar_c 8 Dec 2020 16:23:17 -0000 1.4
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,23 +0,0 @@
> -$OpenBSD: patch-FunctionBar_c,v 1.4 2020/12/08 16:23:17 sthen Exp $
> -
> -This function is called at the wrong time and will cause use-after-free's,
> -so we leak for now.
> -
> -Index: FunctionBar.c
> ---- FunctionBar.c.orig
> -+++ FunctionBar.c
> -@@ -59,14 +59,8 @@ FunctionBar* FunctionBar_new(const char* const* functi
> - }
> -
> - void FunctionBar_delete(FunctionBar* this) {
> -- for (int i = 0; i < 15 && this->functions[i]; i++) {
> -- free(this->functions[i]);
> -- }
> - free(this->functions);
> - if (!this->staticData) {
> -- for (int i = 0; i < this->size; i++) {
> -- free(this->keys[i]);
> -- }
> - free(this->keys);
> - free(this->events);
> - }
> Index: patches/patch-Header_c
> ===================================================================
> RCS file: patches/patch-Header_c
> diff -N patches/patch-Header_c
> --- patches/patch-Header_c 8 Dec 2020 16:23:17 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,15 +0,0 @@
> -$OpenBSD: patch-Header_c,v 1.3 2020/12/08 16:23:17 sthen Exp $
> -
> -Index: Header.c
> ---- Header.c.orig
> -+++ Header.c
> -@@ -168,7 +168,8 @@ void Header_draw(const Header* this) {
> - Header_forEachColumn(this, col) {
> - Vector* meters = this->columns[col];
> - for (int y = (pad / 2), i = 0; i < Vector_size(meters); i++) {
> -- Meter* meter = (Meter*) Vector_get(meters, i);
> -+ Meter* meter = (Meter*) Vector_get(meters, i);
> -+ if (meter == 0x1 || meter->draw == 0x1) continue;
> - meter->draw(meter, x, y, width);
> - y += meter->h;
> - }
> Index: patches/patch-Vector_c
> ===================================================================
> RCS file: patches/patch-Vector_c
> diff -N patches/patch-Vector_c
> --- patches/patch-Vector_c 8 Dec 2020 16:23:17 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,19 +0,0 @@
> -$OpenBSD: patch-Vector_c,v 1.3 2020/12/08 16:23:17 sthen Exp $
> -
> -This function is called at the wrong time and will cause use-after-free's,
> -so we leak for now.
> -
> -Index: Vector.c
> ---- Vector.c.orig
> -+++ Vector.c
> -@@ -34,8 +34,8 @@ void Vector_delete(Vector* this) {
> - if (this->array[i])
> - Object_delete(this->array[i]);
> - }
> -- free(this->array);
> -- free(this);
> -+ /* free(this->array);
> -+ free(this); */
> - }
> -
> - #ifdef DEBUG
> Index: patches/patch-openbsd_OpenBSDProcessList_c
> ===================================================================
> RCS file: /cvs/ports/sysutils/htop/patches/patch-openbsd_OpenBSDProcessList_c,v
> retrieving revision 1.4
> diff -u -p -r1.4 patch-openbsd_OpenBSDProcessList_c
> --- patches/patch-openbsd_OpenBSDProcessList_c 8 Dec 2020 16:23:17 -0000 1.4
> +++ patches/patch-openbsd_OpenBSDProcessList_c 29 Mar 2021 12:50:14 -0000
> @@ -3,75 +3,57 @@ $OpenBSD: patch-openbsd_OpenBSDProcessLi
> Don't include "offline" CPUs in the stats (i.e. CPUs which have been
> disabled by sysctl hw.smt=0).
>
> +https://github.com/htop-dev/htop/pull/580
> +
> Index: openbsd/OpenBSDProcessList.c
> --- openbsd/OpenBSDProcessList.c.orig
> +++ openbsd/OpenBSDProcessList.c
> -@@ -30,24 +30,36 @@ in the source distribution for its full text.
> - static long fscale;
> +@@ -37,11 +37,15 @@ static int pageSize;
> + static int pageSizeKB;
>
> ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidMatchList, uid_t userId) {
> -- int mib[] = { CTL_HW, HW_NCPU };
> -+ int nmib[] = { CTL_HW, HW_NCPU };
> -+ int mib[] = { CTL_HW, HW_NCPUONLINE };
> - int fmib[] = { CTL_KERN, KERN_FSCALE };
> -- int i, e;
> +- const int mib[] = { CTL_HW, HW_NCPU };
> ++ const int nmib[] = { CTL_HW, HW_NCPU };
> ++ const int mib[] = { CTL_HW, HW_NCPUONLINE };
> + const int fmib[] = { CTL_KERN, KERN_FSCALE };
> + int ncmib[] = { CTL_KERN, KERN_CPUSTATS, 0 };
> -+ int i, e, ncpu, cpu_index_c;
> - OpenBSDProcessList* opl;
> - ProcessList* pl;
> -- size_t size;
> -+ size_t size, size_ncpu, size_cpustats;
> + int r;
> ++ unsigned int cpu_index_c = 0, ncpu;
> + size_t size;
> char errbuf[_POSIX2_LINE_MAX];
> + struct cpustats cpu_stats;
>
> - opl = xCalloc(1, sizeof(OpenBSDProcessList));
> - pl = (ProcessList*) opl;
> - size = sizeof(pl->cpuCount);
> -+ size_ncpu = sizeof(int);
> -+ size_cpustats = sizeof(cpu_stats);
> -+ cpu_index_c = 0;
> - ProcessList_init(pl, Class(OpenBSDProcess), usersTable, pidMatchList, userId);
> -
> - e = sysctl(mib, 2, &pl->cpuCount, &size, NULL, 0);
> - if (e == -1 || pl->cpuCount < 1) {
> - pl->cpuCount = 1;
> + OpenBSDProcessList* opl = xCalloc(1, sizeof(OpenBSDProcessList));
> + ProcessList* pl = (ProcessList*) opl;
> +@@ -54,6 +58,12 @@ ProcessList* ProcessList_new(UsersTable* usersTable, H
> }
> -+ e = sysctl(nmib, 2, &ncpu, &size_ncpu, NULL, 0);
> -+ if (e == -1) {
> -+ ncpu = pl->cpuCount;
> -+ }
> -+
> opl->cpus = xCalloc(pl->cpuCount + 1, sizeof(CPUData));
> -+ opl->cpuIndex = xRealloc(opl->cpuIndex, pl->cpuCount * sizeof(int));
>
> ++ size = sizeof(int);
> ++ r = sysctl(nmib, 2, &ncpu, &size, NULL, 0);
> ++ if (r < 0) {
> ++ ncpu = pl->cpuCount;
> ++ }
> ++
> size = sizeof(fscale);
> if (sysctl(fmib, 2, &fscale, &size, NULL, 0) < 0) {
> -@@ -65,6 +77,19 @@ ProcessList* ProcessList_new(UsersTable* usersTable, H
> - errx(1, "kvm_open: %s", errbuf);
> + CRT_fatalError("fscale sysctl call failed");
> +@@ -75,6 +85,18 @@ ProcessList* ProcessList_new(UsersTable* usersTable, H
> }
>
> -+ for (i = 0; i < ncpu; i++) {
> + opl->cpuSpeed = -1;
> ++
> ++ size = sizeof(cpu_stats);
> ++ for (unsigned int i = 0; i < ncpu; i++) {
> + ncmib[2] = i;
> -+ sysctl(ncmib, 3, &cpu_stats, &size_cpustats, NULL, 0);
> ++ sysctl(ncmib, 3, &cpu_stats, &size, NULL, 0);
> + if (cpu_stats.cs_flags & CPUSTATS_ONLINE) {
> -+ opl->cpuIndex[cpu_index_c] = i;
> -+ cpu_index_c++;
> -+ }
> -+
> -+ if (cpu_index_c == pl->cpuCount) {
> -+ break;
> ++ cpu_index_c++;
> + }
> -+ }
> +
> ++ if (cpu_index_c == pl->cpuCount)
> ++ break;
> ++ }
> +
> return pl;
> }
> -
> -@@ -323,7 +348,7 @@ static void OpenBSDProcessList_scanCPUTime(OpenBSDProc
> - u_int64_t avg[CPUSTATES] = {0};
> -
> - for (int i = 0; i < this->super.cpuCount; i++) {
> -- getKernelCPUTimes(i, kernelTimes);
> -+ getKernelCPUTimes(this->cpuIndex[i], kernelTimes);
> - CPUData* cpu = this->cpus + i + 1;
> - kernelCPUTimesToHtop(kernelTimes, cpu);
> -
> Index: patches/patch-openbsd_OpenBSDProcessList_h
> ===================================================================
> RCS file: patches/patch-openbsd_OpenBSDProcessList_h
> diff -N patches/patch-openbsd_OpenBSDProcessList_h
> --- patches/patch-openbsd_OpenBSDProcessList_h 8 Dec 2020 16:23:17 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,16 +0,0 @@
> -$OpenBSD: patch-openbsd_OpenBSDProcessList_h,v 1.3 2020/12/08 16:23:17 sthen Exp $
> -
> -Don't include "offline" CPUs in the stats (i.e. CPUs which have been
> -disabled by sysctl hw.smt=0).
> -
> -Index: openbsd/OpenBSDProcessList.h
> ---- openbsd/OpenBSDProcessList.h.orig
> -+++ openbsd/OpenBSDProcessList.h
> -@@ -36,6 +36,7 @@ typedef struct OpenBSDProcessList_ {
> -
> - CPUData* cpus;
> -
> -+ int *cpuIndex;
> - } OpenBSDProcessList;
> -
> -
> Index: patches/patch-openbsd_OpenBSDProcess_c
> ===================================================================
> RCS file: patches/patch-openbsd_OpenBSDProcess_c
> diff -N patches/patch-openbsd_OpenBSDProcess_c
> --- patches/patch-openbsd_OpenBSDProcess_c 8 Dec 2020 16:23:17 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,18 +0,0 @@
> -$OpenBSD: patch-openbsd_OpenBSDProcess_c,v 1.3 2020/12/08 16:23:17 sthen Exp $
> -
> -This function is called at the wrong time and will cause use-after-free's,
> -so we leak for now.
> -
> -Index: openbsd/OpenBSDProcess.c
> ---- openbsd/OpenBSDProcess.c.orig
> -+++ openbsd/OpenBSDProcess.c
> -@@ -173,9 +173,7 @@ OpenBSDProcess* OpenBSDProcess_new(Settings* settings)
> - }
> -
> - void Process_delete(Object* cast) {
> -- OpenBSDProcess* this = (OpenBSDProcess*) cast;
> - Process_done((Process*)cast);
> -- free(this);
> - }
> -
> - void OpenBSDProcess_writeField(Process* this, RichString* str, ProcessField field) {
> Index: patches/patch-openbsd_Platform_c
> ===================================================================
> RCS file: patches/patch-openbsd_Platform_c
> diff -N patches/patch-openbsd_Platform_c
> --- patches/patch-openbsd_Platform_c 8 Dec 2020 16:23:17 -0000 1.9
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,14 +0,0 @@
> -$OpenBSD: patch-openbsd_Platform_c,v 1.9 2020/12/08 16:23:17 sthen Exp $
> -
> -Index: openbsd/Platform.c
> ---- openbsd/Platform.c.orig
> -+++ openbsd/Platform.c
> -@@ -227,7 +227,7 @@ void Platform_setSwapValues(Meter* this) {
> - this->total = pl->totalSwap = total;
> - this->values[0] = pl->usedSwap = used;
> -
> -- free(swdev);
> -+ //free(swdev);
> - }
> -
> - void Platform_setTasksValues(Meter* this) {
>

No comments:

Post a Comment