diff options
author | Russ Cox <rsc@swtch.com> | 2020-01-08 20:03:31 -0500 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2020-01-13 16:46:14 -0500 |
commit | ce27d7babdf2ee09ff6d1f8d4a166c2208995774 (patch) | |
tree | af0a32622542ca768cc0446c6287a4f51a7d1c06 /src/cmd/devdraw | |
parent | db20f89c3286f277945ac4307f789a9980d31bf6 (diff) | |
download | plan9port-ce27d7babdf2ee09ff6d1f8d4a166c2208995774.tar.gz plan9port-ce27d7babdf2ee09ff6d1f8d4a166c2208995774.tar.bz2 plan9port-ce27d7babdf2ee09ff6d1f8d4a166c2208995774.zip |
devdraw: can use libthread directly now on macOS
Diffstat (limited to 'src/cmd/devdraw')
-rw-r--r-- | src/cmd/devdraw/cocoa-screen.m | 19 | ||||
-rw-r--r-- | src/cmd/devdraw/cocoa-srv.c | 2 | ||||
-rw-r--r-- | src/cmd/devdraw/cocoa-thread.c | 35 | ||||
-rw-r--r-- | src/cmd/devdraw/cocoa-thread.h | 34 | ||||
-rw-r--r-- | src/cmd/devdraw/mkwsysrules.sh | 2 |
5 files changed, 13 insertions, 79 deletions
diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m index 984ede03..64b2bf4c 100644 --- a/src/cmd/devdraw/cocoa-screen.m +++ b/src/cmd/devdraw/cocoa-screen.m @@ -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> @@ -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; @@ -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; @@ -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 @@ -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]]; diff --git a/src/cmd/devdraw/cocoa-srv.c b/src/cmd/devdraw/cocoa-srv.c index dcb1801a..2211a06f 100644 --- a/src/cmd/devdraw/cocoa-srv.c +++ b/src/cmd/devdraw/cocoa-srv.c @@ -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> diff --git a/src/cmd/devdraw/cocoa-thread.c b/src/cmd/devdraw/cocoa-thread.c deleted file mode 100644 index 92b92d2c..00000000 --- a/src/cmd/devdraw/cocoa-thread.c +++ /dev/null @@ -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 diff --git a/src/cmd/devdraw/cocoa-thread.h b/src/cmd/devdraw/cocoa-thread.h deleted file mode 100644 index d5793f0a..00000000 --- a/src/cmd/devdraw/cocoa-thread.h +++ /dev/null @@ -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 diff --git a/src/cmd/devdraw/mkwsysrules.sh b/src/cmd/devdraw/mkwsysrules.sh index 8ab67f76..839ebab3 100644 --- a/src/cmd/devdraw/mkwsysrules.sh +++ b/src/cmd/devdraw/mkwsysrules.sh @@ -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' |