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 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 <i...@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) {