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;

Reply via email to