With the help of semarie@ we managed to get an improved version of these patches upstream:
https://github.com/i3/i3/pull/2161 Many thanks also to bcook@ and landry@ for their handholding while I was fighting a hopeless battle with git. The current version of the patches has the flaw that $ i3-msg 'shmlog on' will trigger a pledge abort of i3. The attached patch is semarie@'s fix for that problem. ok? Index: Makefile =================================================================== RCS file: /cvs/ports/x11/i3/Makefile,v retrieving revision 1.101 diff -u -p -r1.101 Makefile --- Makefile 15 Jan 2016 19:57:24 -0000 1.101 +++ Makefile 17 Jan 2016 22:29:18 -0000 @@ -3,7 +3,7 @@ COMMENT = improved dynamic tiling window manager DISTNAME = i3-4.11 -REVISION = 1 +REVISION = 2 CATEGORIES = x11 EXTRACT_SUFX = .tar.bz2 Index: patches/patch-src_log_c =================================================================== RCS file: /cvs/ports/x11/i3/patches/patch-src_log_c,v retrieving revision 1.10 diff -u -p -r1.10 patch-src_log_c --- patches/patch-src_log_c 4 Oct 2015 08:48:12 -0000 1.10 +++ patches/patch-src_log_c 17 Jan 2016 22:29:18 -0000 @@ -3,7 +3,7 @@ $OpenBSD: patch-src_log_c,v 1.10 2015/10 OpenBSD lacks pthread_condattr_setpshared() --- src/log.c.orig Wed Sep 30 08:55:10 2015 -+++ src/log.c Fri Oct 2 16:58:54 2015 ++++ src/log.c Sun Jan 17 23:10:44 2016 @@ -20,7 +20,9 @@ #include <sys/mman.h> #include <sys/stat.h> @@ -14,7 +14,49 @@ OpenBSD lacks pthread_condattr_setpshare #include "util.h" #include "log.h" -@@ -154,11 +156,13 @@ void open_logbuffer(void) { +@@ -58,6 +60,8 @@ static char *loglastwrap; + static int logbuffer_size; + /* File descriptor for shm_open. */ + static int logbuffer_shm; ++/* Size (in bytes) of physical memory */ ++static long long physical_mem_bytes; + + /* + * Writes the offsets for the next write and for the last wrap to the +@@ -89,6 +93,16 @@ void init_logging(void) { + } + } + } ++ if (physical_mem_bytes == 0) { ++#if defined(__APPLE__) ++ int mib[2] = {CTL_HW, HW_MEMSIZE}; ++ size_t length = sizeof(long long); ++ sysctl(mib, 2, &physical_mem_bytes, &length, NULL, 0); ++#else ++ physical_mem_bytes = (long long)sysconf(_SC_PHYS_PAGES) * ++ sysconf(_SC_PAGESIZE); ++#endif ++ } + /* Start SHM logging if shmlog_size is > 0. shmlog_size is SHMLOG_SIZE by + * default on development versions, and 0 on release versions. If it is + * not > 0, the user has turned it off, so let's close the logbuffer. */ +@@ -108,15 +122,6 @@ void open_logbuffer(void) { + * For 512 MiB of RAM this will lead to a 5 MiB log buffer. + * At the moment (2011-12-10), no testcase leads to an i3 log + * of more than ~ 600 KiB. */ +- long long physical_mem_bytes; +-#if defined(__APPLE__) +- int mib[2] = {CTL_HW, HW_MEMSIZE}; +- size_t length = sizeof(long long); +- sysctl(mib, 2, &physical_mem_bytes, &length, NULL, 0); +-#else +- physical_mem_bytes = (long long)sysconf(_SC_PHYS_PAGES) * +- sysconf(_SC_PAGESIZE); +-#endif + logbuffer_size = min(physical_mem_bytes * 0.01, shmlog_size); + #if defined(__FreeBSD__) + sasprintf(&shmlogname, "/tmp/i3-log-%d", getpid()); +@@ -154,11 +159,13 @@ void open_logbuffer(void) { header = (i3_shmlog_header *)logbuffer; @@ -28,7 +70,7 @@ OpenBSD lacks pthread_condattr_setpshare logwalk = logbuffer + sizeof(i3_shmlog_header); loglastwrap = logbuffer + logbuffer_size; -@@ -273,8 +277,10 @@ static void vlog(const bool print, const char *fmt, va +@@ -273,8 +280,10 @@ static void vlog(const bool print, const char *fmt, va store_log_markers(); Index: patches/patch-src_main_c =================================================================== RCS file: /cvs/ports/x11/i3/patches/patch-src_main_c,v retrieving revision 1.15 diff -u -p -r1.15 patch-src_main_c --- patches/patch-src_main_c 21 Dec 2015 10:16:03 -0000 1.15 +++ patches/patch-src_main_c 17 Jan 2016 22:29:18 -0000 @@ -9,7 +9,7 @@ add pledge: "proc exec" for executing programs --- src/main.c.orig Wed Sep 30 08:55:10 2015 -+++ src/main.c Sun Dec 20 14:58:54 2015 ++++ src/main.c Sun Jan 17 17:55:53 2016 @@ -87,6 +87,7 @@ struct ws_assignments_head ws_assignments = TAILQ_HEAD /* We hope that those are supported and set them to true */ @@ -26,16 +26,14 @@ add pledge: if (!extreply->present) { DLOG("xkb is not present on this server\n"); } else { -@@ -784,6 +786,13 @@ int main(int argc, char *argv[]) { +@@ -784,6 +786,11 @@ int main(int argc, char *argv[]) { xcb_free_gc(conn, gc); xcb_free_pixmap(conn, pixmap); } + +#if defined(__OpenBSD__) -+ /* can't use pledge if shm* calls are used */ -+ if (shmlog_size == 0) -+ if (pledge("stdio rpath wpath cpath proc exec unix", NULL) == -1) -+ err(EXIT_FAILURE, "pledge"); ++ if (pledge("stdio rpath wpath cpath proc exec unix", NULL) == -1) ++ err(EXIT_FAILURE, "pledge"); +#endif struct sigaction action;