aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2020-01-08 20:03:31 -0500
committerRuss Cox <rsc@swtch.com>2020-01-13 16:46:14 -0500
commitce27d7babdf2ee09ff6d1f8d4a166c2208995774 (patch)
treeaf0a32622542ca768cc0446c6287a4f51a7d1c06 /src
parentdb20f89c3286f277945ac4307f789a9980d31bf6 (diff)
downloadplan9port-ce27d7babdf2ee09ff6d1f8d4a166c2208995774.tar.gz
plan9port-ce27d7babdf2ee09ff6d1f8d4a166c2208995774.tar.bz2
plan9port-ce27d7babdf2ee09ff6d1f8d4a166c2208995774.zip
devdraw: can use libthread directly now on macOS
Diffstat (limited to 'src')
-rw-r--r--src/cmd/devdraw/cocoa-screen.m19
-rw-r--r--src/cmd/devdraw/cocoa-srv.c2
-rw-r--r--src/cmd/devdraw/cocoa-thread.c35
-rw-r--r--src/cmd/devdraw/cocoa-thread.h34
-rw-r--r--src/cmd/devdraw/mkwsysrules.sh2
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'