Saturday, March 27, 2021

htop update, including threads display

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)

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 27 Mar 2021 13:34:50 -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 27 Mar 2021 13:34:50 -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 27 Mar 2021 13:34:50 -0000
@@ -3,75 +3,60 @@ $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) {
+ OpenBSDProcessList* opl = xCalloc(1, sizeof(OpenBSDProcessList));
+ ProcessList* pl = (ProcessList*) opl;
+@@ -53,7 +57,14 @@ ProcessList* ProcessList_new(UsersTable* usersTable, H
pl->cpuCount = 1;
}
-+ 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 +86,19 @@ 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: /cvs/ports/sysutils/htop/patches/patch-openbsd_OpenBSDProcessList_h,v
retrieving revision 1.3
diff -u -p -r1.3 patch-openbsd_OpenBSDProcessList_h
--- patches/patch-openbsd_OpenBSDProcessList_h 8 Dec 2020 16:23:17 -0000 1.3
+++ patches/patch-openbsd_OpenBSDProcessList_h 27 Mar 2021 13:34:50 -0000
@@ -3,13 +3,16 @@ $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.h
--- openbsd/OpenBSDProcessList.h.orig
+++ openbsd/OpenBSDProcessList.h
-@@ -36,6 +36,7 @@ typedef struct OpenBSDProcessList_ {
+@@ -43,7 +43,7 @@ typedef struct OpenBSDProcessList_ {

CPUData* cpus;
-
+ int cpuSpeed;
+-
+ 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