aboutsummaryrefslogtreecommitdiff
path: root/src/libthread
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-12-27 00:13:48 +0000
committerrsc <devnull@localhost>2004-12-27 00:13:48 +0000
commite1dc7e4511d4644060d4904dcae50808d966fff7 (patch)
treef2e33a457ee10672e40b659826ccd1a649f9ca19 /src/libthread
parent43db87f1fcb51065ef50beae9da8b6310ccf1cae (diff)
downloadplan9port-e1dc7e4511d4644060d4904dcae50808d966fff7.tar.gz
plan9port-e1dc7e4511d4644060d4904dcae50808d966fff7.tar.bz2
plan9port-e1dc7e4511d4644060d4904dcae50808d966fff7.zip
signal handling, add prototype for pthreadinit
Diffstat (limited to 'src/libthread')
-rw-r--r--src/libthread/pthread.c2
-rw-r--r--src/libthread/thread.c12
-rw-r--r--src/libthread/threadimpl.h9
3 files changed, 19 insertions, 4 deletions
diff --git a/src/libthread/pthread.c b/src/libthread/pthread.c
index 77f97a4f..8ca8f8f1 100644
--- a/src/libthread/pthread.c
+++ b/src/libthread/pthread.c
@@ -101,7 +101,7 @@ _threadsetproc(Proc *p)
}
void
-pthreadinit(void)
+_pthreadinit(void)
{
pthread_key_create(&prockey, 0);
}
diff --git a/src/libthread/thread.c b/src/libthread/thread.c
index 69895181..9a42b9e8 100644
--- a/src/libthread/thread.c
+++ b/src/libthread/thread.c
@@ -190,7 +190,7 @@ scheduler(void *v)
p = v;
setproc(p);
- print("s %p %d\n", p, gettid());
+ // print("s %p %d\n", p, gettid());
p->tid = pthread_self();
pthread_detach(p->tid);
lock(&p->lock);
@@ -503,6 +503,13 @@ threadmainstart(void *v)
threadmain(threadargc, threadargv);
}
+extern Jmp *(*_notejmpbuf)(void);
+static Jmp*
+threadnotejmp(void)
+{
+ return &proc()->sigjmp;
+}
+
int
main(int argc, char **argv)
{
@@ -524,8 +531,9 @@ main(int argc, char **argv)
_wunlock = threadwunlock;
_rsleep = threadrsleep;
_rwakeup = threadrwakeup;
+ _notejmpbuf = threadnotejmp;
- pthreadinit();
+ _pthreadinit();
p = procalloc();
if(mainstacksize == 0)
mainstacksize = 65536;
diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h
index 9f70b0e0..fb7e4c3b 100644
--- a/src/libthread/threadimpl.h
+++ b/src/libthread/threadimpl.h
@@ -4,6 +4,12 @@ typedef struct Context Context;
typedef struct Proc Proc;
typedef struct _Procrendez _Procrendez;
+typedef struct Jmp Jmp;
+struct Jmp
+{
+ p9jmp_buf b;
+};
+
enum
{
STACK = 8192
@@ -54,6 +60,7 @@ struct Proc
_Procrendez runrend;
Context schedcontext;
void *udata;
+ Jmp sigjmp;
};
extern Proc *xxx;
@@ -67,4 +74,4 @@ extern Proc *_threadproc(void);
extern void _threadsetproc(Proc*);
extern int _threadlock(Lock*, int, ulong);
extern void _threadunlock(Lock*, ulong);
-
+extern void _pthreadinit(void);