From c54b8b69ede9d92e802baa1163d9cd734b034fb4 Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 27 Jan 2006 05:51:54 +0000 Subject: bsd --- src/lib9/sleep.c | 10 ++++++++++ src/libthread/386-ucontext.h | 2 ++ src/libthread/BSD.c | 2 +- src/libthread/OpenBSD-386-asm.s | 3 ++- 4 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib9/sleep.c b/src/lib9/sleep.c index 5da602eb..7a5c79fd 100644 --- a/src/lib9/sleep.c +++ b/src/lib9/sleep.c @@ -1,9 +1,19 @@ #include #define NOPLAN9DEFINES +#include #include #include #include +#if defined(__NetBSD__) || (defined(__OpenBSD__) && OpenBSD <= 200511) +# define sched_yield() \ +# do{ struct timespec ts; \ +# ts.tv_sec = 0; \ +# ts.tv_nsec = 10; \ +# nanosleep(&ts, 0); \ +# }while(0) +#endif + int p9sleep(long milli) { diff --git a/src/libthread/386-ucontext.h b/src/libthread/386-ucontext.h index 57fd1bd8..00af62aa 100644 --- a/src/libthread/386-ucontext.h +++ b/src/libthread/386-ucontext.h @@ -5,6 +5,8 @@ typedef struct ucontext ucontext_t; extern int swapcontext(ucontext_t*, ucontext_t*); extern void makecontext(ucontext_t*, void(*)(), int, ...); +extern int getmcontext(mcontext_t*); +extern void setmcontext(mcontetx_t*); /*- * Copyright (c) 1999 Marcel Moolenaar diff --git a/src/libthread/BSD.c b/src/libthread/BSD.c index fdbc712a..b9e8888e 100644 --- a/src/libthread/BSD.c +++ b/src/libthread/BSD.c @@ -33,7 +33,7 @@ _threadlock(Lock *l, int block, ulong pc) for(i=0; i<1000; i++){ if(!_tas(&l->held)) return 1; - sched_yield(); + sleep(0); } /* increasingly slow */ for(i=0; i<10; i++){ diff --git a/src/libthread/OpenBSD-386-asm.s b/src/libthread/OpenBSD-386-asm.s index 7ffb413c..1a59436f 100644 --- a/src/libthread/OpenBSD-386-asm.s +++ b/src/libthread/OpenBSD-386-asm.s @@ -96,4 +96,5 @@ ENTRY(rfork_thread) movl %ebp, %esp popl %ebp PIC_PROLOGUE - jmp PIC_PLT(_C_LABEL(__cerror)) \ No newline at end of file + jmp PIC_PLT(_C_LABEL(__cerror)) + -- cgit v1.2.3