On Fri, Mar 09, 2018 at 06:42:25PM -0600, Aaron Poffenberger wrote:
> This patch updates libthread in plan9port to be MAP_STACK compliant,
> replacing calls to malloc/free with mmap and munmap when allocating
> thread stacks.
> 
> The most obvious effect  was sam(1), acme(1), and 9term(1) would
> core when executed. All three run now with seemingly no issues.
> 
> There maybe other problems I haven't noticed yet.

it's missing a revision bump, apart from that, your diff looks good for
me. thanks for looking into this,
Index: Makefile
===================================================================
RCS file: /cvs/ports/plan9/plan9port/Makefile,v
retrieving revision 1.24
diff -u -p -r1.24 Makefile
--- Makefile    20 Jan 2018 03:29:56 -0000      1.24
+++ Makefile    10 Mar 2018 16:34:49 -0000
@@ -6,6 +6,7 @@ BROKEN-powerpc =        threading issues
 COMMENT =              Plan 9 from user space
 
 DISTNAME =             plan9port-20180117
+REVISION =             0
 
 GH_ACCOUNT =           9fans
 GH_PROJECT =           plan9port
Index: patches/patch-src_libthread_thread_c
===================================================================
RCS file: patches/patch-src_libthread_thread_c
diff -N patches/patch-src_libthread_thread_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_libthread_thread_c        10 Mar 2018 16:34:49 -0000
@@ -0,0 +1,26 @@
+$OpenBSD$
+
+Index: src/libthread/thread.c
+--- src/libthread/thread.c.orig
++++ src/libthread/thread.c
+@@ -108,8 +108,9 @@ threadalloc(void (*fn)(void*), void *arg, uint stack)
+       ulong z;
+ 
+       /* allocate the task and stack together */
+-      t = malloc(sizeof *t+stack);
+-      if(t == nil)
++      t = mmap(0, sizeof *t+stack, PROT_READ|PROT_WRITE,
++              MAP_PRIVATE|MAP_ANON|MAP_STACK, -1, 0);
++      if(t == MAP_FAILED)
+               sysfatal("threadalloc malloc: %r");
+       memset(t, 0, sizeof *t);
+       t->stk = (uchar*)(t+1);
+@@ -364,7 +365,7 @@ procscheduler(Proc *p)
+                       delthreadinproc(p, t);
+                       p->nthread--;
+ /*print("nthread %d\n", p->nthread); */
+-                      free(t);
++                      munmap(t, t->stksize);
+               }
+       }
+ 
Index: patches/patch-src_libthread_threadimpl_h
===================================================================
RCS file: patches/patch-src_libthread_threadimpl_h
diff -N patches/patch-src_libthread_threadimpl_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_libthread_threadimpl_h    10 Mar 2018 16:34:49 -0000
@@ -0,0 +1,14 @@
+$OpenBSD$
+
+Index: src/libthread/threadimpl.h
+--- src/libthread/threadimpl.h.orig
++++ src/libthread/threadimpl.h
+@@ -10,6 +10,8 @@
+ #             define _XOPEN_SOURCE    /* for Snow Leopard */
+ #     endif
+ #     include <ucontext.h>
++#elif defined(__OpenBSD__)
++#     include <sys/mman.h>
+ #endif
+ #include <sys/utsname.h>
+ #include "libc.h"

Reply via email to