URI: 
       tdevdraw: can use libthread directly now on macOS - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit ce27d7babdf2ee09ff6d1f8d4a166c2208995774
   DIR parent db20f89c3286f277945ac4307f789a9980d31bf6
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Wed,  8 Jan 2020 20:03:31 -0500
       
       devdraw: can use libthread directly now on macOS
       
       Diffstat:
         M src/cmd/devdraw/cocoa-screen.m      |      19 +++++++++++--------
         M src/cmd/devdraw/cocoa-srv.c         |       2 +-
         D src/cmd/devdraw/cocoa-thread.c      |      35 -------------------------------
         D src/cmd/devdraw/cocoa-thread.h      |      34 -------------------------------
         M src/cmd/devdraw/mkwsysrules.sh      |       2 +-
       
       5 files changed, 13 insertions(+), 79 deletions(-)
       ---
   DIR diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m
       t@@ -12,7 +12,7 @@
        
        #include <u.h>
        #include <libc.h>
       -#include  "cocoa-thread.h"
       +#include <thread.h>
        #include <draw.h>
        #include <memdraw.h>
        #include <keyboard.h>
       t@@ -41,8 +41,8 @@ usage(void)
                threadexitsall("usage");
        }
        
       +
        @interface AppDelegate : NSObject<NSApplicationDelegate,NSWindowDelegate>
       -+ (void)callservep9p:(id)arg;
        + (void)makewin:(NSValue *)v;
        + (void)callkicklabel:(NSString *)v;
        + (void)callsetNeedsDisplayInRect:(NSValue *)v;
       t@@ -108,14 +108,18 @@ threadmain(int argc, char **argv)
                }
        }
        
       -@implementation AppDelegate
        
       -+ (void)callservep9p:(id)arg
       +void
       +callservep9p(void *v)
        {
       +        USED(v);
       +
                servep9p();
       -        [NSApp terminate:self];
       +        [NSApp terminate:myApp];
        }
        
       +@implementation AppDelegate
       +
        + (void)makewin:(NSValue *)v
        {
                NSRect r, sr;
       t@@ -331,9 +335,7 @@ struct Cursors {
                [NSApp setApplicationIconImage:i];
                [[NSApp dockTile] display];
        
       -        [NSThread
       -                detachNewThreadSelector:@selector(callservep9p:)
       -                toTarget:[self class] withObject:nil];
       +        proccreate(callservep9p, nil, 0);
        }
        
        - (NSApplicationPresentationOptions)window:(id)arg
       t@@ -671,6 +673,7 @@ struct Cursors {
                if(actualRange)
                        *actualRange = sr;
                LOG(@"use range: %ld, %ld", sr.location, sr.length);
       +        s = nil;
                if(sr.length)
                        s = [[NSAttributedString alloc]
                                initWithString:[_tmpText substringWithRange:sr]];
   DIR diff --git a/src/cmd/devdraw/cocoa-srv.c b/src/cmd/devdraw/cocoa-srv.c
       t@@ -4,7 +4,7 @@
        
        #include <u.h>
        #include <libc.h>
       -#include "cocoa-thread.h"
       +#include <thread.h>
        #include <draw.h>
        #include <memdraw.h>
        #include <keyboard.h>
   DIR diff --git a/src/cmd/devdraw/cocoa-thread.c b/src/cmd/devdraw/cocoa-thread.c
       t@@ -1,35 +0,0 @@
       -#include <u.h>
       -#include <libc.h>
       -#include "cocoa-thread.h"
       -
       -#ifndef TRY_LIBTHREAD
       -
       -static pthread_mutex_t initlock = PTHREAD_MUTEX_INITIALIZER;
       -
       -void
       -qlock(QLock *q)
       -{
       -        if(q->init == 0){
       -                pthread_mutex_lock(&initlock);
       -                if(q->init == 0){
       -                        pthread_mutex_init(&q->m, nil);
       -                        q->init = 1;
       -                }
       -                pthread_mutex_unlock(&initlock);
       -        }
       -        pthread_mutex_lock(&q->m);
       -}
       -
       -void
       -qunlock(QLock *q)
       -{
       -        pthread_mutex_unlock(&q->m);
       -}
       -
       -int
       -threadid(void)
       -{
       -        return pthread_mach_thread_np(pthread_self());
       -}
       -
       -#endif
   DIR diff --git a/src/cmd/devdraw/cocoa-thread.h b/src/cmd/devdraw/cocoa-thread.h
       t@@ -1,34 +0,0 @@
       -/*
       - * I am too ignorant to know if Cocoa and Libthread
       - * can coexist: if I try to include thread.h, now
       - * that Devdraw uses Cocoa's threads (and timers), it
       - * crashes immediately; when Devdraw was using
       - * proccreate(), it could run a little while before to
       - * crash; the origin of those crashes is hard to
       - * ascertain, because other programs using Libthread
       - * (such as 9term, Acme, Plumber, and Sam) currently
       - * don't run when compiled with Xcode 4.1.
       - */
       -//#define TRY_LIBTHREAD
       -
       -#ifdef TRY_LIBTHREAD
       -        #include <thread.h>
       -#else
       -        #define QLock DQLock
       -        #define qlock dqlock
       -        #define qunlock dqunlock
       -        #define threadexitsall exits
       -        #define threadmain main
       -
       -        typedef struct QLock QLock;
       -
       -        struct QLock
       -        {
       -                int init;
       -                pthread_mutex_t m;
       -        };
       -
       -        void        qlock(QLock*);
       -        void        qunlock(QLock*);
       -        int threadid(void);
       -#endif
   DIR diff --git a/src/cmd/devdraw/mkwsysrules.sh b/src/cmd/devdraw/mkwsysrules.sh
       t@@ -53,7 +53,7 @@ if [ $WSYSTYPE = x11 ]; then
                echo 'WSYSOFILES=$WSYSOFILES '$XO
        elif [ $WSYSTYPE = osx-cocoa ]; then
                echo 'OBJCFLAGS=$OBJCFLAGS -fobjc-arc'
       -        echo 'WSYSOFILES=$WSYSOFILES osx-draw.o cocoa-screen.o cocoa-srv.o cocoa-thread.o'
       +        echo 'WSYSOFILES=$WSYSOFILES osx-draw.o cocoa-screen.o cocoa-srv.o'
                echo 'MACARGV=macargv.o'
        elif [ $WSYSTYPE = nowsys ]; then
                echo 'WSYSOFILES=nowsys.o'